【问题标题】:Eloquent add optional condition to hasMany where foreign key is nullEloquent 将可选条件添加到外键为 null 的 hasMany
【发布时间】: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);

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以根据自己的需要进一步优化,只需提供关于查询的想法

    $users = User::with('comments', function($query){
        $query->where('user_id', '=', null)->where('status', '1');
    })->paginate(10);
    

    【讨论】:

    • 不要这样做 where('user_id', '=', null) 有一个现有的方法是 whereNull('user_id')
    猜你喜欢
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    相关资源
    最近更新 更多