Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 用雄辩的语言查询相关表数据_Laravel_Eloquent_Query Builder - Fatal编程技术网

Laravel 用雄辩的语言查询相关表数据

Laravel 用雄辩的语言查询相关表数据,laravel,eloquent,query-builder,Laravel,Eloquent,Query Builder,我在尝试从基于相关表的模型中获取记录时遇到问题 我有两个表,一个叫做leads,另一个叫做recycle\u logs,我的应用程序基本上会在leads表中发送相同的记录,比如每月发送一次,当它这样做时,我会在recycle\u logs中存储一条新记录 问题是,我需要选择所有具有特定活动id值且具有特定状态的Lead,该状态不同于invalid,迄今为止良好,现在的问题是,我只需要在他们没有任何与其关联的recycleLog或者与特定lead关联的最后一个recycleLog早于30天前的情况

我在尝试从基于相关表的模型中获取记录时遇到问题

我有两个表,一个叫做
leads
,另一个叫做
recycle\u logs
,我的应用程序基本上会在
leads
表中发送相同的记录,比如每月发送一次,当它这样做时,我会在
recycle\u logs
中存储一条新记录

问题是,我需要选择所有具有特定
活动id
值且具有特定
状态的
Lead
,该状态不同于
invalid
,迄今为止良好,现在的问题是,我只需要在他们没有任何与其关联的
recycleLog
或者与特定
lead
关联的最后一个
recycleLog
早于
30天前的情况下才能获取它们

我现在拥有的有点像这样

    $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();
试试这个:

$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')
    ->where(function($q) {
        $q->whereHas('leadRecyclingLog', function($q) {
            $q->where(LeadRecyclingLog::CREATED_AT, '<', (new Carbon())->subDays($this->configRecyclingDays));
        })
        ->orWhereHas('leadRecyclingLog', '<', 1); // Where count of the relationship is smaller than 1
    })->get();
$leads=$this->leadModel->where(Lead::CAMPAIGN\u ID,$this->CAMPAIGN ID)
->其中(Lead::DUPLICATED,Lead::DUPLICATED\u NO)
->其中(Lead::Lead\u STATUS,“!=”,Lead::Lead\u STATUS\u INVALID)
->订购人(Lead::在“desc”处创建)
->其中(函数($q){
$q->whereHas('leadRecyclingLog',函数($q){

$q->where(LeadRecyclingLog::CREATED_AT,'whereHas(relationship)
,not
->with(relationship)
->with(relationship)
将关联结果附加到原始模型(原始模型的查询将不受
->with()
的影响)。
->whereHas(relationship)
根据条件过滤原始模型。

通过@devk的帮助使其工作

    $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')
        ->where(function($q) {
            $q->whereHas('leadRecyclingLog', function($q) {
                $q->where(LeadRecyclingLog::CREATED_AT, '<', (new Carbon())->subDays($this->configRecyclingDays));
            })
                ->doesntHave('leadRecyclingLog', 'or');
        })->get();
$leads=$this->leadModel->where(Lead::CAMPAIGN\u ID,$this->CAMPAIGN ID)
->其中(Lead::DUPLICATED,Lead::DUPLICATED\u NO)
->其中(Lead::Lead\u STATUS,“!=”,Lead::Lead\u STATUS\u INVALID)
->订购人(Lead::在“desc”处创建)
->其中(函数($q){
$q->whereHas('leadRecyclingLog',函数($q){

$q->where(LeadRecyclingLog::CREATED_AT,'或Where Doesnthave不是查询生成器的方法,因此这也不起作用。我已经成功地在一个简单的MySQL原始查询中复制了我想要的内容,效果很好,如果有帮助的话,我会将其添加到问题中。或者Where Has的第二个参数必须是Closure。通过稍微修改您的查询,它可以起作用,谢谢感谢您的帮助:)
    $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')
        ->where(function($q) {
            $q->whereHas('leadRecyclingLog', function($q) {
                $q->where(LeadRecyclingLog::CREATED_AT, '<', (new Carbon())->subDays($this->configRecyclingDays));
            })
                ->doesntHave('leadRecyclingLog', 'or');
        })->get();