Laravel 5 - получение значений из коллекции и передача для просмотра

Я создаю систему управления заказами в Laravel 5.3. Я храню заказы в двух разных таблицах - orders, order_content. Первый содержит основные данные заказа, второй - содержание. Я использую пакет Crinsane's Shopping Cart для управления содержимым заказа. Поля таблицы содержания заказа: идентификатор, экземпляр, содержание. Поле содержимого содержит коллекцию с содержимым определенного порядка, по которому выполняется поиск.

Моя проблема заключается в следующем - мне нужно получить все содержимое заказа (название продукта, код, количество) в определенную дату.

Вот как далеко я зашел:

public function showByDate()
{
    $datetime_today = new DateTime('now');
    $date = $datetime_today->format('Y-m-d');

    //get all orders by date, which are confirmed
    $orders = Pasutijums::where('pasutijums_uz', '=', $date)
        ->where('ir_apstiprinats', '=', 1)->get();

    foreach($orders as $order)
    {
        // get order's content
        $order_contents = DB::table('order_content')->where('instance', '=', $order->pasut_num)->get();

        foreach($order_contents as $order)
        {
            // unserialize the content field
            $collection = unserialize($order->content);
        }

    }

    $items = $collection->all();

    return view('admin.kopsavilkumi.pec-datuma')
        ->with('orders', $orders)
        ->with('date', $date)
        ->with('items', $items)
        ;

}

В представлении я пытаюсь просмотреть содержимое заказа, но отображается только один продукт ...

 @foreach($items as $order)


        <tr>
            <td class = "text-primary"> {{ $order->options->code }} </td>
            <td> {{ $order->name }} </td>
            <td> {{ $order->qty }} </td>
        </tr>


@endforeach

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

ОБНОВИТЬ: Ответ Уолтера Сехаса сработал для меня, но теперь мне нужно получить доступ к содержимому коллекции в моем представлении ... Это то, что я получаю, когда dd ($ collection) в контроллере:

    Collection {#292 ▼
    #items: array:2 [▼
    0 => Collection {#307 ▼
        #items: array:2 [▼
        "da951a56dc871db7b48a41f7d14b007b" => CartItem {#308 ▼
            +rowId: "da951a56dc871db7b48a41f7d14b007b"
            +id: "22"
            +qty: "1"
            +name: "Preces nosaukums 1"
            +price: 7.5
            +options: CartItemOptions {#309 ▶}
                -associatedModel: null
                -taxRate: 0
                +"priceTax": 7.5
    }
    "138ba08bdbf1ac8f17e9e6f257af1b88" => CartItem {#310 ▼
                +rowId: "138ba08bdbf1ac8f17e9e6f257af1b88"
                +id: "123"
                +qty: "1"
                +name: "Preces nosaukums 2"
                +price: 1.8
                +options: CartItemOptions {#311 ▶}
                    -associatedModel: null
                    -taxRate: 0
    }
  ]
}
1 => Collection {#306 ▼
                #items: array:1 [▼
                "da951a56dc871db7b48a41f7d14b007b" => CartItem {#312 ▼
                    +rowId: "da951a56dc871db7b48a41f7d14b007b"
                    +id: "22"
                    +qty: "1"
                    +name: "Preces nosaukums 3"
                    +price: 7.5
                    +options: CartItemOptions {#314 ▶}
                        -associatedModel: null
                        -taxRate: 0
    }
  ]
 }
]

}

Вы получаете только 1 элемент, потому что вы перезаписываете $collection в своем цикле.

aynber 06.12.2018 19:09

Спасибо за ответ. Да, я подумал об этом и попытался по-другому сохранить их в другом, но это не сработало.

unity115 06.12.2018 19:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что вы переопределяете коллекцию последним элементом итерации

$datetime_today = new DateTime('now');
$date = $datetime_today->format('Y-m-d');

//get all orders by date, which are confirmed
$orders = Pasutijums::where('pasutijums_uz', '=', $date)
    ->where('ir_apstiprinats', '=', 1)->get();
$collection = collect();
foreach($orders as $order)
{
    // get order's content
    $order_contents = DB::table('order_content')->where('instance', '=', $order- 
         >pasut_num)->get();


    foreach($order_contents as $content)
    {
        // unserialize the content field
        $collection->push(unserialize($content));
    }

}

Спасибо, это сработало! Но как мне теперь получить к ним доступ в моем представлении? Обновлен вопрос с текущим выводом при сборе dd () в контроллере.

unity115 06.12.2018 19:21

@ unity115 Если ответ помог, примите его и проголосуйте за него. Если у вас есть новый вопрос, задайте новый вопрос.

Don't Panic 06.12.2018 19:32

Здорово! Вы можете отметить мой вопрос как ответ, если он есть! Сделайте @foreach, если вы используете лезвие, также, возможно, вы хотите прикрепить коллекцию элементов к каждому заказу, в фактическом состоянии вы получаете все элементы в одной коллекции

Walter Cejas 06.12.2018 19:33

Другие вопросы по теме