如何在Laravel 4中选择相关型号的型号为0?

时间:2013-08-06 09:44:28

标签: php orm laravel laravel-4

我正在使用Laravel 4框架开发PHP应用程序。我已经设置了用户和角色模型。角色可以属于许多用户,用户可以拥有许多角色。我想选择没有任何角色的用户。如何使用Laravel的ORM进行此查询?

这是我的Role.php

class Role extends Eloquent {

    protected $table = 'roles';

    public function users() {
       return $this->belongsToMany('User', 'user_roles');
    }

}

在我的User.php中,我有这段代码:

public function roles() {
    return $this->belongsToMany('Role', 'user_roles');
}

我已经尝试过以下代码,但即使我创建了没有角色的用户,它也不会返回任何用户。

User::has('roles', '=', 0)->paginate(15);

下面的代码有效,但用户是stdClass对象。我需要它们是User对象。

$users = DB::table('users')->whereNotIn('id', function($query){
            $query->select('user_id')->from('user_roles');
         })->paginate(15);

修改

为User :: has('roles','=',0)添加了查询日志 - > paginate(15)

  

array(3){[“query”] => string(189)“select * from”users“where   (从“角色”的内部联接“user_roles”中选择count(*)。“id”   =“user_roles”。“role_id”,其中“user_roles”。“user_id”=“users”。“id”)=? limit 15 offset 0“[”bindings“] => array(1){[0] => int(0)} [”time“] => float(0.11)}

1 个答案:

答案 0 :(得分:2)

试试这个:

User::whereNotIn('id', function($query){
        $query->select('user_id')->from('user_roles');
     })->paginate(15);