Как получить продукты, когда отношения соответствуют условию Laravel Eloquent

У меня есть следующие отношения в базе данных, каждая таблица со своей соответствующей и связанной моделью.

введите описание изображения здесь

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

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

Как я могу получить эти данные? мне пришло в голову создать область в модельных продуктах, но я не знаю, как выполнить проверку, так как они могут быть 0 или n элементов в рецепте?

контроллер

Product::with('recipe')
->enableElements()->get();

Модельный продукт

public function scopeEnableElements($query)
{

}

0

Решение

Вы можете запросить от Recipe в WareHouse связывая element_id,

Рецепт модели:

public function warehouses()
{
return $this->hasMany(\App\Models\WareHouse::class, 'element_id', 'element_id');
}

Модель WareHouse:

public function recipes()
{
return $this->hasMany(\App\Models\Recipe::class, 'element_id', 'element_id');
}

Код контроллера:

Product::whereHas('recipes', function($q) {
$q->whereHas('warehouses', function($query) {
$query->whereRaw('WareHouse.stock > Recipe.count');    // use table names here, not model names
});
})->get();

Если вы хотите сделать это с областью в модели рецепта:

public function scopeEnableElements($query)
{
$query->whereHas('warehouses', function($query2) {
$query2->whereRaw('WareHouse.stock > Recipe.count');    // use table names here, not model names
});
}

Тогда в вашем контроллере:

Product::whereHas('recipes', function($query) {
$query->enableElements();
})->get();
1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector