我有一个控制器方法,用于使用电子邮件和名称搜索给定用户组中的用户。我有两组客户和员工,当我搜索员工时,它也会返回客户。
这是控制器代码
public function index(Request $request, UserGroup $group) { //group=staff
$users = $group->users();
if ($request->has('search') && $request->search) {
$users->where('name', 'LIKE', '%' . $request->search . '%')
->orWhere(function ($builder) use ($request) {
$builder->where('email', 'LIKE', '%' . $request->search . '%');
});
}
return response()->json($users->get());
}
在UserGroup模型中,这里是代码的实现
class UserGroup extends Model{
//...
public function users(): BelongsToMany | User | Collection
{
return $this->belongsToMany(User::class, 'user_user_group');
}
//...
}
我只想要UserGroup staff
的用户,并且在搜索关键字中键入姓名或电子邮件。相反,系统甚至会返回没有员工用户组的用户。
我做错了什么?
2条答案
按热度按时间cs7cruho1#
你在写where子句时用了错误的方法。当您在外部使用
orWhere
时,它告诉laravel查询将组表上的用户表与第一个条件或第二个条件连接起来。它应该是组表和(第一个条件或第二个条件)上的联接。当它执行查询时,它应该用圆括号括起来。您的查询应该是:
我希望这对你有帮助。有关更多信息,我建议阅读laravel官方文档。Laravel查询生成器
iqxoj9l92#
您还可以从User::class透视图查询
此查询将获取与员工组具有搜索名称或电子邮件的用户。
我不知道您的用户组和用户之间的关系,只需将单词改为#以匹配您的用户。
#group
=UserGroup
和User
的关系,就像users()
与UserGroup::class
之间的关系一样。#groupColumn
=staff
所属的列。希望有帮助。