首页 > 解决方案 > Laravel 5.4 使用数据透视表查询数据库

问题描述

所以,我有以下表命名:

 ALBUMS(id, name, shared, group_id, user_id)
 GROUPS(id, name, user_id)
 GROUP_USER(group_id, user_id)

我想要做的是,使用 Laravel Eloquent 通过检查 AUTHENTICATED 用户是否是 ALBUM 拥有的 GROUP 的成员来获取查询结果。

专辑型号:

public function groupSecurity()
{
    return $this->belongsTo(Group::class, 'group_id');
}

团体模型:

    public function ownedBy()
{
    return $this->belongsTo(User::class, 'user_id');
}

public function members()
{
    return $this->belongsToMany(User::class, 'group_user');
}

谢谢您的帮助 :)

标签: phpsqllaravel

解决方案


你可以这样做:

$album = Album::whereHas('groupSecurity', function ($query) {
        $query->whereHas('members', function($query2){
            $query2->where('user_id', auth()->user()->id);
        })->where('user_id', auth()->user()->id);
    })->first();

因此,您搜索一张专辑,该专辑groupSecurity在他members的 auth 用户中有一个,而且它也是owned由 auth 用户提供的。如果记录匹配此条件$album将具有 Album 模型的实例,否则它将为 null,因此您可以执行以下操作:

if($album){
    // AUTHENTICATED user is a member of the GROUP owned by the ALBUM
}

推荐阅读