[РЕШЕНО]Копирование объектов

Приветствую, наверное мой вопрос глупый, но как в modx скопировать объект? Задача такая, есть список товаров minishop2, при получении заказом определенного статуса мне нужно все товары данного заказа сохранять в другую таблицу, т.е. создавать другой объект. Я сделал так
if($data['order_status'] == 5){
        $products = $modx->getCollection('msOrderProduct', array('order_id' => $data['order_id']));
        foreach($products as $product){
            $history = $modx->newObject('EstimateHistory');
            $history->fromArray(array(
                'order_id' => $product->get('order_id'),
                'product_id' => $product->get('product_id'),
                'name' => $product->get('name'),
                'count' => $product->get('count'),
                'price' => $product->get('price'),
                'weight' => $product->get('weight'),
                'cost' => $product->get('cost'),
                'options' => json_encode($product->get('options')),
                ));
            $history->save();
        }
    }
Но мне кажется есть вариант покороче. Кто подскажет?
Артур
15 июня 2020, 12:52
modx.pro
159
0

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

Сергей Шлоков
15 июня 2020, 13:15
+1
Ну если принципиально именно объекты копировать, то сойдёт. Долго и дорого, но товаров же в заказе немного.
Если нет, то лучше использовать INSERT SELECT. Данное решение на несколько порядков быстрее! Всего один запрос к БД и никакой инициализации кучи объектов.

Ещё важно не забывать для таких операций использовать транзакции. Документация в помощь.
    Наумов Алексей
    15 июня 2020, 14:15
    +1
    Наряду с методом fromArray есть еще toArray, что несколько сократит код.
      Артур
      16 июня 2020, 14:28
      0
      Спасибо всем за ответы, очень помогли.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3