【问题标题】:using whereNotIn and subquery in query builder (Laravel 8)在查询构建器中使用 whereNotIn 和子查询(Laravel 8)
【发布时间】:2021-08-25 07:38:26
【问题描述】:

我想制作一个控制器功能来按名称搜索用户并仅显示那些不在项目中的名称。

这是一个 SQL 查询,用于显示名称包含 'mmm' 且尚未在项目 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();

你知道我哪里做错了吗?谢谢!

【问题讨论】:

    标签: laravel query-builder


    【解决方案1】:

    知道了。我只需要 ->pluck('member_id') 而不是 toarray()

    而且,必须对 where/orWhere 进行分组。

    $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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2017-04-13
      • 2020-05-02
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多