我試圖從基於相關表格的模型中獲取記錄時出現問題。用Eloquent查詢相關表格數據
我有兩個表一個叫leads
和一個叫recycle_logs
,我的應用程序將基本發送相同的記錄在leads
表像每月一次,當它這樣做,我會存儲新紀錄recycle_logs
。
的問題是,我需要選擇所有leads
與特定campaign_id
值和具有特定status
是從invalid
不同,到目前爲止好,現在的問題是我需要的,只有當他們穿上,讓他們」如果與該特定lead
關聯的最後recycleLog
比之前的30
更早,則可以使用與之關聯的任何recycleLogs
。
我目前看起來有點像這樣。
$leads = $this->leadModel->where(Lead::CAMPAIGN_ID, $this->campaignID)
->where(Lead::DUPLICATED, Lead::DUPLICATED_NO)
->where(Lead::LEAD_STATUS, "!=" ,Lead::LEAD_STATUS_INVALID)
->orderBy(Lead::CREATED_AT, 'desc')
->with(
['leadRecyclingLog' => function($query) {
$query->where(LeadRecyclingLog::CREATED_AT, '<', (new Carbon())->subDays($this->configRecyclingDays))
->orWhere(LeadRecyclingLog::ID, null);
}]
)
->get();
我究竟做錯了什麼?它始終選擇相同數量的記錄,無論我添加或刪除recycleLogs
我已經設法通過原始SQL查詢完成,我會在下面發佈以防萬一它幫助任何人,我仍然想要知道如何在Eloquent/Query Builder中做到這一點。
SELECT * FROM `leads` LEFT JOIN `lead_recycling_logs` ON `leads`.`guid` = `lead_recycling_logs`.`original_lead_guid` WHERE `leads`.`campaign_id` = :campaignID AND `leads`.`duplicated` = 0 AND `leads`.`lead_status` != :invalidStatus AND (`lead_recycling_logs`.`id` IS NULL OR `lead_recycling_logs`.`created_at` < :recyclingDate) ORDER BY `leads`.`created_at` DESC
orWhereDoesntHave不是查詢生成器的方法,因此,這也不起作用。我已經設法在簡單的MySQL原始查詢中複製我想要的東西,它工作得很好,如果有幫助,我會將其添加到問題中。 –
哦,對不起。我編輯它來糾正。 – devk
orWhereHas的第二個參數必須是一個關閉 –