2017-10-10 10 views
-1

で検索するEloquentモデルを使用してこのクエリを書くにはどうすればよいですか?管理者または販売者の役割を持つユーザーを取得する必要があります。eloquentを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(); 

モデル

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


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

答えて

4

あなたは関係が存在し、サブクエリでwhereHas()メソッドを使用することができる基準を満たすだけの結果を返すように雄弁を使用して、任意のエンティティを照会します。

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

トップレベルでどのエンティティを使用するかは、逆の構文と同じです。

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