如何在Laravel中将对象与许多项目同步

时间:2018-12-14 23:36:09

标签: php arrays laravel laravel-5 laravel-5.5

我在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

  

错误提示:“字符串偏移量'product_id'不合法”

非常感谢。

1 个答案:

答案 0 :(得分:0)

  

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();
});