如果用户已存在于组中,如何在数据透视表中查询?
我有USERS表,GROUPS表和GROUP_USER表。在组用户表中,其中存储了两个表的id,所以如果他/她已经存在,我想检查我的状态,将会有一条消息。
以下是我当前查询语句的代码,用于检查它是否存在:
Group::where('user_id', '=', $user)
->where('group', '=', $group->user->id)
->first;
答案:
if ($group) {
if ($group->users()->where('users.id', $user)->exists()) {
Session::flash('info', 'You\'re already part of the group', $group->group_name);
} else {
$group->users()->attach($user);
Session::flash('success', 'You are now part of the group' . ' ' . $group->group_name);
}
} elseif ($false) {
Session::flash('danger', 'Invalid group code');
}
return back();
答案 0 :(得分:1)
您可以尝试:
$group->users()->where('users.id', $user)->exists()
要插入数据透视表,您可以使用attach
方法:
$group->users()->attach($user_id)
<强>更新强>
从评论中,您的代码应为:
if ($group) {
if($group->user()->where('users.id', $user)->exists()) {
Session::flash('info', 'Already part of this group');
} else {
$group->users()->attach($user);
Session::flash('success', 'You are now part of the group!');
}
} else {
Session::flash('danger', 'Wrong Group Code!');
}
return redirect()->back();
答案 1 :(得分:0)
您可以使用whereHas()
这样的方法:
Group::whereHas('users', function($q) use($user) {
$q->where('id', $user->id); // check for single user id
$q->whereIn('id', $user_ids_arr); // or use whereIn & pass array of user ids
});
或者,如果您想要boolean
作为回报,可以使用exists()
这样的方法:
$group = Group::find($group_id);
$user_exists = $group->users()->where('id', $user_id)->exists();
// return 'true' if user exits else returns 'false'
<强>更新强>
如果您想将用户与群组相关联,可以使用attach()
,如下所示:
$group->users()->attach($user_id);
更新代码 - 评论
$user_arr = $group->users->pluck('id')->all(); // returns an array
$valid_user = in_array($user->id, $user_arr); // true / false
if ($group) {
if($valid_user) {
Session::flash('info', 'Already part of this group');
} else {
$group->users()->attach($user->id);
}
} else {
Session::flash('danger', 'Wrong Group Code!');
}
return redirect()->back();
希望这有帮助!