2017-11-06 5 views
0

私は2つのモデルがあります - ユーザーとRoleUser。各ユーザーは役割に割り当てられます。そこで私は、Userモデルで 'ロール'メソッドを宣言することで、1対1の関係を定義しました。LaravelのEloquentの関係を使用したエラー

public function role(){ 
     return $this->hasOne('Vanguard\RoleUser', 'user_id'); 
} 

これが私の役割モデルコントローラで

class RoleUser extends Model 
{ 
    // 
    public $table = 'role_user'; 

    protected $fillable = ['user_id', 'role_id']; 

} 

ですが、私はROLE_ID = 2を持つユーザーを取得しようとしていますが、クエリは、すべてのユーザーが(すなわち3)の代わりに、ただ一人のユーザーを返し続けます。 これは私のコントローラです

$users = User::with(['role' => function ($query) { 
      $query->where('role_id', 2); 
     }])->get(); 

原因は何ですか?

+0

Laravelのバージョンは何? –

答えて

1

withのスコープを使用すると、存在するかどうかに関係なく、eager loaded関係にスコープが追加されます。あなたが望むものを達成するためにはwhereHasも必要です。

あなたがいることを定義していると仮定すると、
$users = User::whereHas('role', function ($q) { 
    $q->where('role_id', 2); 
})->with(['role' => function ($q) { 
    $q->where('role_id', 2); 
}])->get(); 
0

変更クエリは、このようなものにするために:

User::all()->with('role')->where('role_id', 2)->get()

私はこのヘルプを願っています。

0

:ユーザーが1つの役割を持っている

  • ロールには多くのユーザーがいます。

、あなたが単にクエリを記述することができます。

$role = Role::with('users')->find(2); 
$users = $role->users; 

上記の例はあなたを与える各ユーザーを想定したロールIDを持つすべてのユーザー2.

0

は、だけにして、これを与える、1つの役割を有し得ます試してみてください。あなたのユーザーモデルで

class User extends Model 
{ 
    public function role() 
    { 
     return $this->belongsTo(RoleUser::class); 
    } 
} 
012あなたの RoleUserモデルで

:今

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

、(最初のティンカーでこれを試してください)必要なデータを取得する:

// Users with role_id 2 
$users = User::where('role_id', 2)->get(); 

// Eager load the Role model to get the entire Role record for each user 
$users = User::with('role')->where('role_id', 2)->get(); 

// Get role's where role_id is 2, and eager load the users 
$role = RoleUser::with('users')->where('id', 2)->get(); 
関連する問題