得到所有雄辩的模型没有关系

时间:2015-07-21 09:19:13

标签: php laravel laravel-5 eloquent

我想获取所有没有关系的模型。

类似于获取具有一个的模型:

return $this->model->has('quote')->orderBy('created_at', 'desc')->get();

我基本上想要反过来。我找不到任何文件来做到这一点。

基本上这个查询:

SELECT * FROM custom_design_requests
RIGHT JOIN quotes
ON quotes.`custom_design_request_id` = `custom_design_requests`.id

但我想避免使用查询构建器(DB::table('custom_design_requests')->rightJoin('quotes', 'quotes.custom_design_request_id', '=', 'custom_design_requests.id')->get();),以便我有一组模型实例。

由于

3 个答案:

答案 0 :(得分:12)

您可以尝试这样的事情:

$this->model->has('quote', '<', 1)->orderBy('created_at', 'desc')->get();

答案 1 :(得分:8)

我认为这比公认的解决方案更好:

$this->model->doesntHave('quote')->orderBy('created_at', 'desc')->get();

这里有更详细的描述:

https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-absence

答案 2 :(得分:2)

尝试:

return $this->model
  ->leftJoin('quotes', 'quotes.custom_design_request_id', '=', 'custom_design_requests.id')
  ->whereNull('quotes.custom_design_request_id')
  ->orderBy('created_at', 'desc')->get();

这将使用引号 LEFT JOIN 您的模型,并且仅采用那些没有相应引号的模型。