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

问题描述 投票:0回答:1

我有一个 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 . '%');
}]);
laravel where-clause
1个回答
0
投票

首先,用户模型应该有一个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 . '%');
});
© www.soinside.com 2019 - 2024. All rights reserved.