2017-08-24 3 views
0

Ich schaffe viele zu viele Beziehung zwischen Benutzern und Rollen wie folgt aus:eloquent: Abfrage viele zu viele Beziehung

Benutzermodell:

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

Rollenmodell:

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

meine Frage ist, wie ich nur Benutzer bekommen kann, die zu einem bestimmten Rollennamen gehören, zum Beispiel, wenn ich einen Rollennamen namens "author" habe, möchte ich alle Autorenbenutzer bekommen, so etwas in 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"; 

Anmerkung: Ich verwende Laravel 5,4

Antwort

1

Sie sollten dies versuchen:

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

Hoffe, dass diese Arbeit für Sie !!!

0
User::whereHas('roles', function($query){ 
    $query->where('role_name', 'author') 
}) 
->get(['name', 'id']); 

Sie können für Tabellenspaltennamen ändern role, habe ich verwendet role_name,

Nun sollte diese Arbeit, wird es Name und ID abrufen für Benutzer nur mit mindestens einer Rolle

+0

dank @GauravRai, ich brauche nur Benutzer-ID und Name nicht alle Felder auszuwählen, ist es eine Möglichkeit, das zu tun? – YouneL

+0

Aktualisierte Antwort, werfen Sie einen Blick –

+0

Wie zu prüfen, nicht nach Ihrer Antwort? @ Gaurav Rai – Fawel

0

Sie können diesen folgenden Code versuchen:

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

oder

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