【发布时间】:2018-03-16 00:32:48
【问题描述】:
我正在尝试从关系中包含空列的选择中排除一些记录。
这是我希望实现的查询:
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();
这正好给了我想要从我的选择中排除的记录
【问题讨论】:
-
除了一些不一致(你的关系是
modelb,但你调用whereHas('modelbs')和一个语法错误(你有2个))在最后),这似乎是正确的。你确定您的关系按您的意愿运作? -
我称它为 modelbs 是因为 eloquent 将每个表名都复数了。关系运作良好。我实际上发现了我错在哪里。我会用正确的查询来回答我自己的问题。
标签: php mysql laravel eloquent subquery