Как правильно сохранить несколько товаров через foreach, attach, sync (laravel)?

155
11 мая 2022, 15:50

Всем привет! Учусь, учусь и еще раз учусь))
Есть 3 таблицы

Orders::

id | user_id | shop_id
1  | 3       | 111  

OrderProducts::

id | order_id | product_id | name | price | oldprice
10 | 1        | 50         | null | null  | null
11 | 1        | 51         | null | null  | null    

Products::

id | shop_id | name | price | oldprice | delivery
50 | 111     | Юла1 | 1000  | 900      | 100     
51 | 111     | Юла2 | 2000  | 1800     | 100    

Если пользователь кладет товар в корзину, OrderProducts - заполняем order_id и product_id, поля (name, price, oldpric) eимеют null, так ка пользователь еще не оформил заказ, а цена может измениться. Это сделано!

Как только пользователь оформил заказ, мы должны из таблицы Products:: (50 и 51 id) поля (name, price, oldpric) перенести в OrderProducts. Как это сделать?

Можно ли сделать с помощью attach, sync? Прочитал документацию + интернет - ниче не понял! https://laravel.com/docs/5.4/eloquent-relationships#inserting-and-updating-related-models

Если можно с комментариями по подробнее.

Заранее - Огромное Вам спасибо, и куча благодарностей)))

Answer 1
$order_products = OrderProduct::where([
        ['order_id', $order_id],
    ])->get();
    foreach ($order_products as $order_product){
        // находим 1 товар (нужны его данные)
        $product = Product::find($order_product->product_id);
        // сохраняем параметры товара
        OrderProduct::where('product_id', $product->id)->update(
            [
                'article'         => $product->article,
                'image'           => $product->image,
                'name'            => $product->name,
                'filter_color_id' => $product->filter_color_id,
                'price'           => $product->price,
                'oldprice'        => $product->oldprice,
            ]
        );
    }

А как можно по другому сохранить?

READ ALSO
Доступ к БД сайта

Доступ к БД сайта

Каким образом можно подключиться к БД сайта без указания пароля? ($mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);, $db_pass) (пользователю не должно быть видно...

228
Создание элемента с масштабируемостью WPF

Создание элемента с масштабируемостью WPF

У меня не получается создать пользовательский элемент который будет авто масштабировать в таблице (grid)Результат которого я хочу добиться...

159
Как дублировать положение объекта?

Как дублировать положение объекта?

У меня есть 2 объекта один статичный другой подвижныйНужно чтобы статичный объект повторял положение подвижного

305
Проблемы с HtmlContentBuilder

Проблемы с HtmlContentBuilder

Всем доброго времени суток

349