雄辩的LARAVEL 5.2.29

时间:2018-03-16 00:32:49

标签: php mysql laravel eloquent subquery

我试图从其关系中具有空列的选择中排除一些记录。

这是我希望实现的查询:

SELECT 
FROM modelas ma WHERE
  ma.id NOT IN (SELECT ma_id from modelbs where modelbs.updated_at is null)

模型A:

public function modelb(){
return $this->hasMany('App\Modelb');
}

模型B

public function modela(){
return $this->belongsTo('App\Modela');
}

现在,我想查询所有具有模型B的模型A,其中模型B的某个列不为空。

以下是我的尝试方式:

Modela::whereHas('modelbs', function ($query) {
            $query->whereNotNull('myColumnOfModelB');
        })->get();

这完全给了我想要从我的选择中排除的记录

1 个答案:

答案 0 :(得分:0)

好吧,我能够找出错误的地方。所以这是一个实现原始sql的查询:

Modela::whereDoesntHave('modelbs', function ($query) {
            $query->whereNull('someModelBcolumn');
        })->get()

原始SQL

SELECT 
FROM modelas ma WHERE
  ma.id NOT IN (SELECT ma_id from modelbs where modelbs.updated_at is null)

&#34; whereDoesntHave()&#34; 相当于&#34; SELECT FROM modelas ma WHERE ma.id NOT IN &#34;而&#34; $ query-&gt; whereNull()&#34; 是等效于&#34;的实际子查询(从modelbs中选择ma_id,其中modelbs.updated_at IS NULL < /强>)&#34;