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 not”?