【问题标题】:issue in Laravel DB query with search data and count带有搜索数据和计数的 Laravel DB 查询中的问题
【发布时间】:2021-10-26 04:13:06
【问题描述】:

我想在用户表中搜索用户名,并且我在成员表中有 count 个成员。而组的表是主表。成员表中的多个组成员条目。但我不能在一个查询中同时搜索用户名和成员数。我的查询如下

$group = Group::select('groups.*', DB::raw('count(group_id) as totalMembers'), 'users.name as ownerName', 'users.id as userId')
            ->leftJoin('members', 'members.group_id', '=', 'groups.id')
            ->leftJoin('users', 'users.id', '=', 'members.user_id')
            ->where('members.memberStatus', 'Joined')
            ->where(function ($query) use ($request) {
                $query->where('name', "like", "%" . $request->searchText . "%");
                $query->orWhere('groupName', "like", "%" . $request->searchText . "%");            
            })
            ->groupBy('groups.id')
            ->get();

在此查询中,count 成员不正确,但搜索正常 我的表结构如下

用户表 enter image description here

成员表 enter image description here

分组表格 enter image description here

【问题讨论】:

  • DB::raw('count(members.group_id) as totalMembers

标签: mysql sql laravel search


【解决方案1】:

试试这个子查询

$group = Group::select(['groups.*', 
                        'users.name as ownerName', 
                        'users.id as userId',
                        \DB::raw("(SELECT count(members.group_id) FROM members
                            WHERE members.group_id = groups.id
                            GROUP BY members.group_id) as totalMembers")])
            ->leftJoin('members', 'members.group_id', '=', 'groups.id')
            ->leftJoin('users', 'users.id', '=', 'members.user_id')
            ->where('members.memberStatus', 'Joined')
            ->where(function ($query) use ($request) {
                $query->where('name', "like", "%" . $request->searchText . "%");
                $query->orWhere('groupName', "like", "%" . $request->searchText . "%");            
            })
            ->groupBy('groups.id')
            ->get();

DB::raw('count(members.group_id) as totalMembers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多