Laravel - 如何通过关系来执行where查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - 如何通过关系来执行where查询?相关的知识,希望对你有一定的参考价值。

我有一个 Member 模型,它与一个 User:

    public function user()
    
        return $this->hasOne(User::class, "user_id");
    

我需要对用户表内的字段进行(过滤)where查询。以下是我的尝试,使用 with() 在我 MemberRepository. 我做错了什么,有没有更好的方法?

$members = $this->model->where("id", $agencyId)->firstOrFail()->members();

$members->with(['users' => function ($members, $queryParam)
    $members->where('users.name', 'like', $queryParam . '%')
    ->orWhere('users.surname', 'like', $queryParam . '%')
    ->orWhere('users.email', 'like', $queryParam . '%');
]);
答案

首先,用户模型应该有一个id字段,如果已经有就不要再使用user_id字段了。如果你使用user_id作为主键,请使用。

 protected $primaryKey = 'user_id';

我认为不同的主键是错误的方式,正确的方式是id.所以不要在关系中使用user_id...User::class, "user_id"... ...

其次,如果你在你的成员模型中没有使用with变量,你就没有在口才查询中使用with方法。还有一个错误:用用户而不是用户

您的修改代码如下。

$members->whereHas('user', function ($q) use ($queryParam) 
    $q->where('name', 'like', '%' . $queryParam . '%')
    ->orWhere('surname', 'like', '%' . $queryParam . '%')
    ->orWhere('email', 'like', '%' . $queryParam . '%');
);

以上是关于Laravel - 如何通过关系来执行where查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 雄辩的关系中使用 where 子句

Laravel框架——增删改查

如何在 Laravel 模型关系中使用“where not”?

laravel-admin 怎样查库中的数据只查出一条where()排序最大的一条

在 laravel 中搜索查询并计算结果的多对多关系

Laravel 5.4 - 如何对急切加载关系进行分页