php - 如何在 Laravel 4 中选择相关模型计数为 0 的模型?

标签 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 (select count(*) from "roles" inner join "user_roles" on "roles"."id" = "user_roles"."role_id" where "user_roles"."user_id" = "users"."id") = ? limit 15 offset 0" ["bindings"]=> array(1) { [0]=> int(0) } ["time"]=> float(0.11) }

最佳答案

试试这个:

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

关于php - 如何在 Laravel 4 中选择相关模型计数为 0 的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18076715/

相关文章:

php - 数据库 |分面搜索

c++ - 使用 ODB ORM 执行存储过程

java - Hibernate Transient Extends问题

php - Laravel 搜索列以给定的单词开头

laravel - Arduino POST 请求到 Laravel API

php - 如何触发 EventSource SSE 事件?

php - 从视频中选择 * WHERE url = substring($url, 0, 5)

c# - 我使用反射的自定义映射可以更快吗?

php - Laravel 私有(private) channel 未授权 : Error 404

PHP 的 mysql 迁移到 mysqli 性能