#laravel
#laravel
Вопрос:
Здравствуйте, у меня есть запрос, который уже работает, и он объединяет два запроса, но что мне нужно, так это объединить один и тот же запрос product _id
, а не выводить его в другой массив.
Вот мой код:
$first = DB::table('delivery_receipt_detail');
$first->join('delivery_receipts', 'delivery_receipt_detail.delivery_receipt_id', '=', 'delivery_receipts.id');
$first->where(function ($first) use ($start_date, $end_date) {
$first->whereBetween('delivery_receipts.posting_date', [new Carbon($start_date), new Carbon($end_date)]);
$first->orWhereDate('delivery_receipts.posting_date', '=', new Carbon($start_date));
$first->orWhereDate('delivery_receipts.posting_date', '=', new Carbon($end_date));
});
$first->groupBy('delivery_receipt_detail.product_id');
$first->select('delivery_receipt_detail.product_id as delivery_product_id', DB::raw('SUM(product_qty) as delivery_product_qty'));
$result_one = $first->get();
//Sales
$query = DB::table('sale_detail');
$query->join('sales', 'sale_detail.sale_id', '=', 'sales.id');
$query->where(function ($query) use ($start_date, $end_date) {
$query->whereBetween('sales.posting_date', [new Carbon($start_date), new Carbon($end_date)]);
$query->orWhereDate('sales.posting_date', '=', new Carbon($start_date));
$query->orWhereDate('sales.posting_date', '=', new Carbon($end_date));
});
$query->groupBy('sale_detail.product_id');
$query->select('sale_detail.product_id as sales_product_id', DB::raw('SUM(product_qty) as sales_product_qty'));
$test = $query->get();
$merged = $result_one->merge($test);
$result = $merged->all();
return $result;
и мой результат таков:
[
{
"delivery_product_id": "1",
"delivery_product_qty": 4
},
{
"delivery_product_id": "2",
"delivery_product_qty": 1
},
{
"sales_product_id": "1",
"sales_product_qty": "3"
},
{
"sales_product_id": "2",
"sales_product_qty": "3"
}
]
Что мне нужно, так это этот вывод
[
{
"product_id": "1",
"delivery_product_qty": 4
"sales_product_qty": "3"
},
{
"product_id": "2",
"delivery_product_qty": 1
"sales_product_qty": "3"
}
]
Мне нужно объединить это и объединить один и тот же product_id и показать их разные количества.
Комментарии:
1. Просто из любопытства, почему вы вызываете каждый метод отдельно вместо объединения методов вместе?
Ответ №1:
В этом случае, я думаю, вам нужно только указать то же имя для product_id
при выборе и ->merge
сделает все остальное
$first = DB::table('delivery_receipt_detail')
->select('delivery_product_id as product_id', 'delivery_product_qty');
// ...
$query = DB::table('sale_detail')
->select('sales_product_id as product_id', 'sales_product_qty');
// ...
$merged = $result_one->merge($test);
Комментарии:
1. он будет объединять только два запроса, но не объединять в один массив