【发布时间】:2019-10-03 12:22:42
【问题描述】:
我正在建立一个网站,其中许多成员可以加入许多组。
//User.php
public function groups()
{
return $this->belongsToMany(Group::class, 'group_member', 'member_id', 'group_id');
}
从组id中检索相关成员的函数
//UserRepository.php
public function getRelatedMembersByGroupIds(array $groupIds)
{
$members = User::whereHas('groups', function ($query) use ($groupIds) {
return $query->whereIn('groups.id', $groupIds);
});
return $members->get();
}
正在从 UserController 调用存储库
//UserController.php
public function getRelatedMembersByGroupIds(Request $request)
{
$groupIds = $request->get('group_ids');
$members = $this->userRepository->getRelatedMembersByGroupIds($groupIds);
$responses = [
'status' => 'success',
'groupRelatedMembers' => $members
];
return response()->json($responses);
}
返回
SQLSTATE[23000]:违反完整性约束:1052 列 'id' 在 where 子句不明确(SQL:select users.* from users where exists (select * from groups inner join group_member on groups.id = group_member.group_id 其中 users.id = group_member.member_id 和 (1) 中的 groups.id 和 groups.deleted_at 为 null 并且 id = 1))
【问题讨论】:
-
提示:
and id = 1 -
你遗漏了部分代码,where('id', 1) some where
-
添加了代码。
-
1 是请求中的 group_id。
-
whereIn('groups.id', $groupIds)通常不是必需的,whereIn('id', $groupIds)应该可以工作并且可能允许创建表别名(虽然不是 100% 确定)