如何在数据透视表中查询

时间:2016-12-19 14:53:36

标签: laravel eloquent laravel-5.2 pivot-table

如果用户已存在于组中,如何在数据透视表中查询?

我有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();

2 个答案:

答案 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);
  

详细了解Updating Many to Many Relationships

更新代码 - 评论

$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();

希望这有帮助!