Laravel Query для результата с подмассивом не красноречивым

Пожалуйста, помогите мне в моем проекте в школе. Как я могу запросить в контроллере Laravel что-то вроде этой ситуации.
У меня есть три таблицы:
Shipping_table и Shipping_products и tbl_products, теперь моя структура таблицы такова:

Стол отгрузки:

Ship_ID (INT AUTO INC)
AMOUNT (DOUBLE,2)
NAME (VARCHAR)
SHIP_DATE (DATE)
RECEIVER (VARCHAR)

Shipping_products:

ID (INT AUTO INC)
Ship_id (foreign key from shipping table)
Product_id

Products_table:

Product_id (Auto Inc)
name(varchar)
Qty(int)
Description (varchar)

Теперь то, что я хочу получить результат запроса, как это:
Я хочу получить все в таблице доставки и в подмассиве, я хочу получить продукты, которые перечислены в shipping_products с желаемым идентификатором доставки.

Нечто похожее на результат: ПРИМЕР Я ИМЕЮ 2 значения Shipping_table

Array(2) {
[0] Array(4) {
['Ship_id'] "1"['Amount'] "10000"['Ship_date'] "1995-12-11"['Ship_products'] Array(3)
['id'] "1" Array(2)
['product_id'] "5"['name'] "Product 1"['id'] "2" Array(2)
['product_id'] "6"['name'] "Product 2"['id'] "3" Array(2)
['product_id'] "10"['name'] "Product 15"
}
[1] Array(4) {
['Ship_id'] "2"['Amount'] "15000"['Ship_date'] "1995-12-15"['Ship_products'] Array(2)
['id'] "1" Array(2)
['product_id'] "5"['name'] "Product 1"['id'] "2" Array(2)
['product_id'] "6"['name'] "Product 2"}
}

0

Решение

Часть SQL проста (используя JOINS)

SELECT *
FROM Shipping S
LEFT JOIN Shipping_Products SP
ON SP.Ship_Id=S.Ship_Id
LEFT JOIN Products P
ON P.Product_id=SP.Product_id

php часть сложнее, так как вы должны получить результаты в цикле и обнаружить изменения в Ship_id а также Product_id и положить в результирующий массив.

Так как это домашнее задание .. Я оставлю это в качестве упражнения …


ЭТО БЫСТРЫЙ ПРИМЕР АЛГОРИТМА — непроверенный, но логически обоснованный.

$cur_ship = '';
$cur_prod = '';
$results  = array();
foreach ($resultset as $key => $row) {
if ($cur_ship != $row['Ship_id']) {
$cur_ship = $row['Ship_id'];
$cur_prod = '';
$results[$cur_ship] = array();
// Fill ship info from $row
}
if ($cur_prod != $row['Product_id']) {
$cur_prod = $row['Product_id'];
$results[$cur_ship][$cur_prod] = array();
// Fill Product info from $row
}
// FILL OUR $results[$cur_ship][$cur_prod] from $row
}
1

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

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

По вопросам рекламы [email protected]