Как синхронизировать объект со многими элементами в Laravel - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть это в Laravel:

form: {
    id: null,
    sale_number: 2,
    client: null,
    products: [
        { product_id:"",description: "", quantity: null, price: null }
    ],
},`

Как синхронизировать много продуктов, если form{} запрос в модели?У меня есть сводная таблица product_sale с дополнительным количеством полей и ценой.

Я пробовал это ...

$items =  $request->products;
$new= [];
foreach( $items as $key => $item){
    $new[$item['product_id']]= array('quantity' => 0,'price'=>0);
}
$sale->products()->sync($new);

В качестве примера, но не могу получить product_id каждого продукта дляsync.

Ошибка говорит: "Недопустимое смещение строки 'product_id'"

Большое спасибо заранее.

1 Ответ

0 голосов
/ 15 декабря 2018

1) создать свою продажу

2) создать свою продукцию

3) синхронизировать их

Примерно так:

/** @var array $data */
$data = $request->all();

// extract products from the input array
$products = array_get($data, 'products');
unset($data['products']);

$saleModel = \DB::transaction(function() use ($data, $products) {
    $sale = SaleModel::create($data);
    $productModels = [];
    foreach($products as $product) {
        $productModel = ProductModel::create($product);
        $productModels[$productModel->id] = $productModel;
    }

    $productIds = array_keys($productModels);
    $sale->products()->sync($productIds);

    return $sale->fresh();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...