带有数据透视表的Laravel 5.4查询数据库

时间:2019-02-17 07:49:26

标签: php sql laravel

因此,我将以下表命名为:

 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');
}

谢谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

您可以这样做:

$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用户,并且还有auth用户的owned。 如果记录匹配,则此条件$album将具有“相册”模型的实例,如果不是,则为null,因此您可以执行以下操作:

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