我现在尝试用Eloquent做一些可能有点太疯狂的事情,我有一个数据库,我有以下表格
Crons - (Has Many) - Campaign - (Has Many) - Leads - (Has Many) - Conversions
我需要获取 Cron 的所有潜在客户,其中转化表中的无条目位于最后 X金额中几天
我想在 Cron 模型上使用范围,但我完全坚持如何从这里开始。
public function scopeWithValidLeads($query) {
return $query->with(['leads' => function($q) {
}]);
}
所以我需要在以下情况下获得LEADS。
A - 潜在客户属于通过多对多关系与Cron相关联的广告系列。
B - 他们在转化表中没有记录在此特定广告系列下,或者如果他们这样做,那么该潜在客户
答案 0 :(得分:0)
您可以使用doesntHave()
方法获得所需的结果,如下所示:
$x = 10; // last 10 days
$crons = Cron::doesntHave('compaign.leads.conversions')
->whereBetween('created_at', [Carbon::now(), Carbon::now()->addDays($x)])
->get();
查询关系缺席:访问模型的记录时,您可能希望根据缺少关系来限制结果。例如,假设您要检索所有没有任何评论的博客帖子。为此,您可以将关系名称传递给
doesntHave
方法
<强>更新强>
根据更新的问题条件,根据我的理解,可以通过以下方式获得潜在客户:
$leads = Lead::whereHas('compaign', function($q) use($compaign) {
$q->has('crons')
->where('id', $compaign->id);
// Use the above line if in case of a compaign is to be filtered out
})->doesntHave('conversions')
->whereBetween('created_at', [Carbon::now(), Carbon::now()->addDays($x)])
->get();
希望这有帮助!