Laravel Красноречивый. Пытаюсь пересечь две промежуточные таблицы. Есть ли более эффективный запрос, чем этот?
Модель устройства:
public function products()
{
return $this->belongsToMany('App\Product');
}
public function users()
{
return $this->belongsToMany('App\User');
}
Модель продукта:
public function units()
{
return $this->belongsToMany('App\Unit');
}
public function users()
{
return $this->belongsToMany('App\User');
}
Модель пользователя:
public function units()
{
return $this->belongsToMany('App\Unit');
}
public function products()
{
return $this->belongsToMany('App\Product');
}
Query Eloquent:
Product::get()
->filter(function ($product) {
return $product->units
->pluck('id')
->intersect(auth()->user()->units->pluck('id'))
->isNotEmpty();
})
Я пытаюсь получить весь продукт, где единица продукта равна единице входа пользователя
UPDATE
I думаю, что код ниже более чистый
Product::whereHas('units', function (Builder $query) {
$query->where([
'units.id' => auth()->user()->units->pluck('id'),
]);
})->get();