我想要创建一个控制器函数来按名称搜索用户,并且只显示那些还不在项目中的名称。
下面是显示名称中包含'mmm‘的用户的SQL查询,这些用户不在项目id =2中:
SELECT `firstname`
FROM `user_details`
WHERE (
`firstname` LIKE "%mmm%" AND `user_id` NOT IN (
SELECT `member_id` FROM `project_members` WHERE `project_members`.`project_id` = 2)
)在查询构建器中(不起作用):
$searchResults = DB::table('user_details')
->select('user_details.user_id', 'user_details.firstname', 'user_details.lastname', 'user_details.nickname', 'user_details.status')
->whereNotIn('user_details.user_id', DB::table('project_members')
->select('member_id')
->where('project_id', '=', $request->project_id)
->get()
->toarray()
)
->where('user_details.firstname', 'LIKE', '%'.$request->searchString.'%')
->orWhere('user_details.lastname', 'LIKE', '%'.$request->searchString.'%')
->get();你知道我哪里做错了吗?谢谢!
发布于 2021-08-25 15:42:00
明白了。我只需要->pluck('member_id')而不是toarray()
另外,where/或where必须分组。
$searchResults = DB::table('user_details')
->select('user_details.user_id', 'user_details.firstname', 'user_details.lastname', 'user_details.nickname', 'user_details.status')
->whereNotIn('user_details.user_id', DB::table('project_members')
->select('member_id')
->where('project_id', '=', $request->project_id)
->get()
->pluck('member_id')
)
->where(function ($query) use ($request) {
$query->where('user_details.firstname', 'LIKE', '%'.$request->searchString.'%')
->orWhere('user_details.lastname', 'LIKE', '%'.$request->searchString.'%')
->orWhere('user_details.nickname', 'LIKE', '%'.$request->searchString.'%');
})
->get();https://stackoverflow.com/questions/68918724
复制相似问题