Laravel有很多关系 - 检索模型

时间:2017-01-10 13:31:46

标签: php mysql laravel relationship

如果我们有这样的事情:

用户

  • ID
  • 名称

作用

  • ID
  • 名称

  • id
  • 名称

ROLE_USER

  • ROLE_ID
  • USER_ID

shop_user

  • shop_id
  • USER_ID

快速:购物--- shop_user ---用户--- role_user ---角色

我们希望所有来自SHOP 1的用户都使用ROLE admin。我们怎么能这样做?

来自SHOP 1的所有用户:

$shop = Shop::find( $shopId );
$shop->users()->get();

这样的事情会很好:

$shop = Shop::find( $shopId );
$shop->users()->roles->()->where( 'name', 'Admin' )->get();

2 个答案:

答案 0 :(得分:3)

假设您的关系按预期工作,这可以为您提供所需的结果:

$shop = Shop::with(['users' => function ($q) {
    $q->whereHas('roles', function ($q) {
        $q->where('name', 'Admin');
    });
}])->find($shopId);

它会选择使用id = $shopId的商店,它会将所有users附加到role,其中roles.name = Admin

您可以获得此类用户$users = $shop->users

答案 1 :(得分:-1)

使用whereHas()方法:

$users = User::whereHas('roles', function($q) use($roleId) {
        $q->where('id', $roleId)
    })->whereHas('shops', function($q) use($shopId) {
        $q->where('id', $shopId)
    })->get();