提问者:小点点

Laravel属性到许多过滤器


我有三个表如下:

id |名称|用户名|密码

id |名称

id |用户id |角色id

这些表通过belongtomany进行通信。我想找到一种方法来选择“users”表中的所有数据,除了表“users\u roles”中“role\u id”的用户值为5的数据之外。我怎么做?


共3个答案

匿名用户

您应该使用whereDoesntHave()选择没有满足特定条件的相关模型的模型:

$users = User::whereDoesntHave('roles', function($q){
    $q->where('role_id', 5);
})->get();

匿名用户

使用Laravel的查询生成器:

<?php
$users = DB::table('users')
    ->leftJoin('users_roles', 'user.id', '=', 'users_roles.user_id')
    ->where('users_roles.role_id', '!=', 5)
    ->get();

http://laravel.com/docs/4.2/queries

或者直接使用雄辩:

<?php
$users = User::whereHas('users_roles', function($q)
{
    $q->where('role_id', '!=', 5);

})->get();

http://laravel.com/docs/4.2/eloquent#querying-关系

匿名用户

<?php
$users = User::whereHas('roles', function($query) {
  $query->where('id', '<>', 5);
})
->orHas('roles','<', 1)
->get();