在Laravel中查询多个关系并离开加入另一个表

时间:2016-12-11 16:41:19

标签: mysql laravel eloquent

我现在尝试用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 - 他们在转化表中没有记录在此特定广告系列下,或者如果他们这样做,那么该潜在客户 比X更强天数。

1 个答案:

答案 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();

希望这有帮助!