簡體   English   中英

雄辯的:查詢多對多關系

[英]eloquent: query many to many relationship

我在用戶和角色之間建立了多對多關系,如下所示:

用戶模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The roles that belong to the user.
     */
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}

榜樣:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    /**
     * The users that belong to the role.
     */
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

我的問題是我如何才能只獲得屬於某個特定角色名稱的用戶,例如,如果我有一個名為“作者”的角色,我想獲得所有作者用戶,在sql中是這樣的:

SELECT users.id, users.name 
FROM users, roles, role_user 
WHERE users.id = role_user.user_id
AND role_user.role_id = roles.id
AND roles.name="author";

注意:我使用的是Laravel 5.4

您應該嘗試這樣:

Role::with(array('user'=>function($query){
        $query->select('id','name');
    }))
   ->where('role_name', 'author')
   ->get();
User::whereHas('roles', function($query){
   $query->where('role_name', 'author')
})
->get(['name', 'id']);

您可以更改表role列名,我使用過role_name

現在這應該可以工作,它將只為至少具有一個角色的用戶檢索名稱和ID

您可以嘗試以下代碼:

$userRoles = Role::where('name', 'author')->with('users')->get();
$userRoles->users->id;
$userRoles->users->name;

要么

$userRoles = Role::select('users.id, users.name')->where('name', 'author')->with('users')->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM