Я пытаюсь понять, как добиться следующего. Я искал и искал безрезультатно.
У меня есть сводная таблица в приложении 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
Начиная запрос с Module
сторона и исключая с whereDoesntHave
должно работать в этом случае:
$id = 1;
$modules = Module::whereDoesntHave('sites', function($q) use ($id){
$q->where('site_id', $id);
})->get();
Других решений пока нет …