У меня есть модели Product
, ProductVariant
и Department
Отдел:
id | name | ....
Продукт:
id | name | sku | department_id | ....
ProductVariant:
id | product_id | quantity | ....
И все связаны друг с другом, как:
- Отношения
products
: Отдел hasMany
Продукты
- Отношения
department
: Продукт belongsTo
Отдел
- Отношения
variants
: Продукт hasMany
Варианты продукта
- Отношения
product
: Продукт belongsTo
Продукт
Все работает, как и ожидалось, между отношениями по Eloquent звонкам
Теперь, используя Eloquent, я пытаюсь получить коллекцию из следующих столбцов:
product.id | product.name | product.variant_count | product.stock | department.name
Под product.stock
Я имею в виду: $product->variants->sum('quantity')
, но мне трудно получить SUM
внутри with()
метод
Что я пробовал до сих пор:
$products = Product::select('id', 'name', 'sku', 'department_id') //gives product.name, sku, etc
->withCount('variants') //gives product.variants_count
->with(['variants' => function($query) {
$query->select('id', 'product_id', 'quantity'); //gives variants->each.quantity
}])
->with(['department' => function($query) {
$query->select('id', 'name'); //gives department.name
}]);
Этот код дает что-то вроде этого:
[
{
"id": "2",
"name": "Letv LU50609 Earphone - Grey",
"sku": "PT-00002",
"department_id": "2",
"variants_count": "1",
"variants": [
{
"id": "2",
"product_id": "2",
"quantity": "35"
}
],
"department": {
"id": "2",
"name": "Phones & Tabs Accessories"
}
},
{
"id": "3",
"name": "MI In-Ear Headphones Basic 3.5mm HSEJ03JY",
"sku": "PT-00003",
"department_id": "2",
"variants_count": "5",
"variants": [
{
"id": "3",
"product_id": "3",
"quantity": "9"
},
{
"id": "4",
"product_id": "3",
"quantity": "9"
},
{
"id": "5",
"product_id": "3",
"quantity": "10"
},
{
"id": "6",
"product_id": "3",
"quantity": "7"
},
{
"id": "7",
"product_id": "3",
"quantity": "7"
}
],
"department": {
"id": "2",
"name": "Phones & Tabs Accessories"
}
}
]
Но я хочу достичь:
[
{
"id": "2",
"name": "Letv LU50609 Earphone - Grey",
"sku": "PT-00002",
"variants_count": "1",
"stock": "35",
"department": "name": "Phones & Tabs Accessories"
},
{
"id": "3",
"name": "MI In-Ear Headphones Basic 3.5mm HSEJ03JY",
"sku": "PT-00003",
"variants_count": "5",
"stock": "42",
"department": "name": "Phones & Tabs Accessories"
}
]
Как мне этого добиться ???