我试图从其关系中具有空列的选择中排除一些记录。
这是我希望实现的查询:
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();
这完全给了我想要从我的选择中排除的记录
答案 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;