首页 文章

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

提问于
浏览
0

我现在想用Eloquent做一些可能有点太疯狂的事情,我有一个数据库,我有以下表格

Crons - (Has Many) - Campaign - (Has Many) - Leads - (Has Many) - Conversions

我需要从 Cron 获取所有潜在客户,在最后X天内 Conversions 表中有 no entries

我正在考虑在 Cron 模型上使用 Scope ,但我完全坚持如何从这里开始 .

public function scopeWithValidLeads($query) {

    return $query->with(['leads' => function($q) {



    }]);

}

所以我需要获得以下是真实的LEADS .

A - 潜在客户属于通过多对多关系与Cron相关联的活动 .

B - 他们在转换表 Under this specific campaign 中没有记录,或者如果他们这样做,那么领先是 older 而不是X天数 .

1 回答

  • 0

    您可以使用doesntHave()方法获得所需的结果,如下所示:

    $x = 10; // last 10 days
    $crons = Cron::doesntHave('compaign.leads.conversions')
                ->whereBetween('created_at', [Carbon::now(), Carbon::now()->addDays($x)])
                ->get();
    

    查询关系缺失:访问模型的记录时,您可能希望根据缺少关系来限制结果 . 例如,假设您要检索所有没有任何评论的博客帖子 . 为此,您可以将关系的名称传递给doesntHave方法

    UPDATE

    根据更新的问题条件,根据我的理解,可以通过以下方式获得潜在客户:

    $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();
    

    希望这可以帮助!

相关问题