Codeigniter - множественный insert_id - PullRequest
0 голосов
/ 26 августа 2018

У меня есть 3 стола для покупок.Один - это стол для покупок.Второй стол заказов.Последний из них - таблица ordersItem.(Все заказы здесь.) Я хочу вставить из таблицы заказов в таблицу ordersItem несколько.Это работает, но просто добавьте одну строку в ordersItem.Я добавил больше товара в корзину, но когда я добавляю insertId, он просто добавляет одну строку и один товар в таблицу ordersItem.Если я использую это без insertId, он работает правильно. (Он добавляет несколько строк).Как я могу сделать это правильно?

Контроллер:

public function insert(){


            $data = array (

                "ordersItem" => json_encode($this->input->post("serviceId")),

                "ordersCus" => $this->session->userdata('people_id'),

                "ordersStatus" => $this->input->post("status"),

                "ordersDate" => date('Y-m-d H:i:s'),
            );

        $this->db->insert("orders", $data);
        $ordersId = $this->db->insert_id();

        $cusId = $this->session->userdata('people_id');

        $checkout = $this->service_model->checkout($cusId);

        foreach ($checkout as $check) {

            $data = array (

                "ordersItemOrdersId" => $ordersId,

                "ordersItemServiceId" => $check->shoppingServiceId,

                "ordersItemEstateId" => $check->shoppingEstateId,

                "ordersItemVehicleId" => $check->shoppingVehicleId,

                "ordersItemPiece" => $check->shoppingPiece,

                "ordersItemAmount" => $check->shoppingPrice,
            );

            $insert = $this->db->insert("ordersItem", $data);

            if($insert) {

                $this->db->where('shoppingCusId', $cusId);
                $this->db->delete('shopping');

                redirect(base_url("checkout"));


            }else {

                echo "Hata!";

            }

        }


    }

1 Ответ

0 голосов
/ 27 августа 2018

Вам нужно переместить redirect(base_url("checkout")); за пределы цикла foreach, поскольку он будет выполнять итерацию цикла, а затем перенаправлять, предотвращая добавление дополнительных строк.

Пример псевдокода:

foreach ($checkout as $check) {
    ...
}

redirect(...);

Я бы также предложил использовать транзакции:

$this->db->trans_start();
foreach ($checkout as $check) {

    $data = array(
        "ordersItemOrdersId" => $ordersId,
        "ordersItemServiceId" => $check->shoppingServiceId,
        "ordersItemEstateId" => $check->shoppingEstateId,
        "ordersItemVehicleId" => $check->shoppingVehicleId,
        "ordersItemPiece" => $check->shoppingPiece,
        "ordersItemAmount" => $check->shoppingPrice,
    );

    $this->db->insert("ordersItem", $data);
}
$this->db->trans_complete();
if ($this->db->trans_status()) {
    $this->db->where('shoppingCusId', $cusId);
    $this->db->delete('shopping');
    redirect(base_url("checkout"));
} else {
    echo "Hata!";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...