Получить все красноречивые модели без отношений

Я хотел бы получить все модели, которые не имеют отношения.

подобно выборке моделей, которые имеют один:

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 ответов


вы можете попробовать что-то вроде этого:

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

Я считаю, что это лучше, чем принятое решение:

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

это описано более подробно здесь:

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


попробуй:

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();

Это ЛЕВОЕ СОЕДИНЕНИЕ ваша модель с кавычками и взять только те, для которых нет соответствующих кавычек.