Laravel 带有搜索数据和计数的数据库查询中的问题
issue in Laravel DB query with search data and count
我想在用户 table 中搜索用户名,并且我在成员 table 中有 count 个成员。而小组的table是主要的table。 members table 在组成员的多个条目中。但我不能在一个查询中同时搜索用户名和成员数。我的查询如下
$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();
在此查询中,成员计数不正确,但搜索正常
我的 table 结构如下
用户table
enter image description here
成员table
enter image description here
组tables
enter image description here
试试这个子查询
$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
我想在用户 table 中搜索用户名,并且我在成员 table 中有 count 个成员。而小组的table是主要的table。 members table 在组成员的多个条目中。但我不能在一个查询中同时搜索用户名和成员数。我的查询如下
$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();
在此查询中,成员计数不正确,但搜索正常 我的 table 结构如下
用户table enter image description here
成员table enter image description here
组tables enter image description here
试试这个子查询
$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