2017-10-10 3 views
-1

Comment puis-je écrire cette requête en utilisant un modèle Eloquent? J'ai besoin d'obtenir des utilisateurs qui ont des rôles d'administrateur ou de vendeur.écrire une requête avec eloquent dans laravel

$users = DB::table('users') 
    ->where('users.verified' , 1) 
    ->join('role_user' , 'role_user.user_id' , '=' , 'users.id') 
    ->join('role' , 'role_user.role_id' , '=' , 'role.id') 
    ->where('role.title' , 'seller') 
    ->orWhere('role.title' , 'admin') 
    ->get(); 

modèles

class User extends Model 
{ 
    public function role() 
    { 
     return $this->belongsToMany(Role::class); 
    } 
} 


class Role extends Model 
{ 
    public function users() 
    { 
     return $this->belongsToMany(User::class); 
    } 
} 

Répondre

4

Si vous souhaitez utiliser Eloquent et interroger toute entité pour retourner des résultats que lorsqu'une relation existe et répond aux critères que vous pouvez utiliser la méthode whereHas() avec une sous-requête.

User::where('verified', 1) 
    ->whereHas('role', function($query) { 
     $query->whereIn('title', ['seller', 'admin']); 
    })->get(); 

La même syntaxe est inversée en fonction de l'entité souhaitée au niveau supérieur.

Role::whereIn('title', ['seller', 'admin']) 
    ->whereHas('users', function($query) { 
     $query->where('verified', 1); 
    })->get();