我有一个 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 . '%');
});