В моем проекте Laravel 6.x у меня есть модели Product
, ProductCategory
и WarehouseProduct
.
В Product
я храню базовую информацию о своих продуктах. В модели ProductCategory
я храню информацию о категории продуктов. В WarehouseProduct
я храню информацию о количестве товаров на складе. Конечно, у меня много складов с большим количеством продуктов.
Мой продукт выглядит так:
class Product extends Model
{
protected $fillable = [
'name',
'item_number',
// ...
];
public function categories() {
return $this->belongsToMany(ProductCategory::class, 'product_category_products',
'product_id', 'product_category_id');
}
}
ProductCategory выглядит так:
class ProductCategory extends Model
{
protected $fillable = [
'name',
'description',
// ...
];
public function products() {
return $this->belongsToMany(Product::class, 'product_category_products',
'product_category_id', 'product_id');
}
}
WarehouseProduct выглядит так: это:
class WarehouseProduct extends Model
{
protected $fillable = [
'product_id',
'warehouse_id',
'amount',
// ...
];
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
}
Теперь у меня есть этот запрос:
$query = WarehouseProduct::select([
'product_id',
'warehouse_id',
DB::raw('SUM(free_amount)'),
DB::raw('SUM(booked_amount)'),
// ...
]);
if (isset($request->warehouse_id)) {
$query->where([['warehouse_id', '=', $request->warehouse_id]]);
}
if (isset($request->product_category_id)) {
// ???
}
Как я могу добавить условие where к запросу, который сказал: товаров из этой категории ?