リレーション先カラムで検索する時にWhereHasだと遅いので、joinで結合したらpaginateがおかしくなったので、親テーブルの主キーでgroupbyする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 特定のユーザを指定 $query = user::query(); $query->whereIn('users.id', [1,2,3]); // WhereHasだとexistsで遅いので、joinで結合 $query->join('posts', function ($join) use ($request){ $join->on('users.id', '=', 'posts.user_id'); $join->whereNull('posts.deleted_at'); // 特定のユーザーで、投稿テキストを検索 $join->where('posts.text', 'like', '%'.$request->keyword.'%'); }); // joinしたので、postsカラムが返らないように、目的のテーブル名.*で指定 $query->select('users.*'); // paginatorの数が合わなくなるlaravelのバグ! // joinの結果、親レコードが複数になる事もあるので(複数の投稿がヒットしたら)、親レコード主キーでgroupbyする $query->groupBy('users.id'); // 投稿テキスト検索にヒットした&特定のユーザを取得 $user = $query->paginate(); |