Symfony для PHP: вставка нескольких строк в таблицу из сеанса с использованием foreach

#php #mysql #symfony #doctrine #shopping-cart

#php #mysql #symfony #доктрина #корзина покупок

Вопрос:

Я пишу функцию для вставки нового заказа с элементами заказа в нем. Эти элементы хранятся в сеансе. Мне нужно вставить все элементы в таблицу order items, используя Symfony для PHP.

Вот что я попробовал:

 $cart = $session->get('cart', []);
foreach($cart as $shoesid => $sizes) {
    foreach ($sizes as $sizeid => $quantity) {
        $oishoe = $this->shoesRepository->findOneBy([
            'shoesid' => $shoesid
        ]);

        $oisize = $this->sizesRepository->findOneBy([
            'sizeid' => $sizeid
        ]);

        $oi = new Orderitems();
        $oi->setOrderid($order);
        $oi->setShoesid($oishoe);
        $oi->setQuantity($quantity);
        $oi->setSizeid($oisize);
    }
}
$manager->persist($oi);

$manager->flush();
 

Но он вставляет только последний элемент в мою таблицу элементов заказа. Какие изменения в коде я должен внести? Если вам нужна более подробная информация, пожалуйста, дайте мне знать.

Комментарии:

1. Вы создаете новую запись с каждой итерацией, но сохраняете ее только после завершения цикла. Чего вы ожидали? Если каждый из этих элементов должен быть сохранен, сохраняйте их в цикле и сбрасывайте только после завершения цикла.

Ответ №1:

Я думаю, вам следует оставить $manager->persist($oi) в цикле foreach, иначе вы сохраняете только последнее значение.

Оставьте $manager->flush() вне цикла.

Комментарии:

1. Понял! Большое спасибо за помощь!