Получить все записи из модели, которые НЕ имеют записи в сводной таблице Laravel 5

Я пытаюсь понять, как добиться следующего. Я искал и искал безрезультатно.

У меня есть сводная таблица в приложении Laravel 5, которая работает, как и ожидалось, со следующими функциями в соответствующих моделях.

// Module.php
//...
public function sites()
{
return $this->belongsToMany('App\Site')->withPivot('enabled');
}

// Site.php
//...
public function modules()
{
return $this->belongsToMany('App\Module')->withPivot('enabled');
}

Я могу получить все соответствующие записи с помощью чего-то вроде следующего в моем Sitecontroller.php

$site = Site::with('modules')->findOrFail($id);

Проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность получить все модули, у которых нет связанной записи в сводной таблице для рассматриваемого сайта.

Может ли кто-нибудь указать в правильном направлении, как я мог бы достичь чего-то подобного, правильным способом (я могу придумать несколько способов, но, кажется, действительно хакерский)

Заранее спасибо.
M

2

Решение

Начиная запрос с Module сторона и исключая с whereDoesntHave должно работать в этом случае:

$id = 1;
$modules = Module::whereDoesntHave('sites', function($q) use ($id){
$q->where('site_id', $id);
})->get();
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]