在laravel中用eloquent写一个查询

时间:2017-10-10 11:40:20

标签: php laravel eloquent query-builder

如何使用Eloquent模型编写此查询?我需要获得具有管理员或卖家角色的用户。

$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);
    }
}

1 个答案:

答案 0 :(得分:4)

如果您想使用Eloquent,并查询任何实体只返回存在关系且符合条件的结果,您可以使用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();