【发布时间】:2021-07-02 03:52:03
【问题描述】:
你如何在一个有说服力的关系中添加一个可选/或条件?
例如,我希望所有用户 cmets 或外键 (user_id) 为 NULL。
select * from `comments` where (`user_id` is null OR `comments`.`user_id` in (1, 2, 3)) AND `status` = 1
在用户关系中添加orWhereNull
public function comments() {
return $this->hasMany(Comments::class)->orWhereNull('user_id');
}
但是 Laravel 正在运行:
select * from `comments` where `user_id` is null and `comments`.`user_id` in (1, 2, 3)
很惊讶之前没有人问过这个问题,我发现类似的事情是这样的: https://laracasts.com/discuss/channels/eloquent/eloquent-orwherenull-when-where-has-no-results
我试过了,但它需要模型而不是查询生成器。
return $this->where(function ($query){
return $query::hasMany(Comment::class)->orWhereNull('user_id');
});
我正在使用预先加载来获取用户列表的 cmets。
$users = User::with('comments')->where('active', 1)->paginate(10);
【问题讨论】: