Задать вопрос
UnluckySerivelha
@UnluckySerivelha

Как отфильтровать модель по наличию связи с другой моделью?

Laravel 11.8.0
Есть две модели, Waste и WasteComponent с отношением многие ко многим, есть таблица, их связывающая:
66c82ff80aa9e997814641.png

В модели Waste есть метод:
public function components() {
        return $this->belongsToMany(WasteComponent::class, 'waste_waste_components', 'waste_id', 'waste_component_id');
}


В модели WasteComponent есть метод:
public function wastes() {
        return $this->belongsToMany(Waste::class, 'waste_waste_components', 'waste_component_id', 'waste_id');
}


Как можно получить, например, список моделей Waste, которые связаны с WasteComponent с ID [1,2,3]?
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
If you need even more power, you may use the whereHas and orWhereHas methods to define additional query constraints on your has queries, such as inspecting the content of a comment:

use Illuminate\Database\Eloquent\Builder;
 
// Retrieve posts with at least one comment containing words like code%...
$posts = Post::whereHas('comments', function (Builder $query) {
    $query->where('content', 'like', 'code%');
})->get();
 
// Retrieve posts with at least ten comments containing words like code%...
$posts = Post::whereHas('comments', function (Builder $query) {
    $query->where('content', 'like', 'code%');
}, '>=', 10)->get();
https://laravel.com/docs/11.x/eloquent-relationshi...
Ответ написан
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Waste::whereHas('components', static fn($q) => $q->whereIn('id', [1,2,3]))
Ответ написан
Комментировать
malinichevvv
@malinichevvv
Back-End PHP Developer
$wastes = Waste::whereHas('components', function ($query) {
    $query->whereIn('waste_component_id', [1, 2, 3]);
})->get();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы