php - 如何在 Laravel 中将对象与许多项目同步
问题描述
我在 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)创建您的销售
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();
});
推荐阅读
- python - Flask SQLAlchemy 动态连接不同数据库
- javascript - 当我将表单发布到数据库中时,传递的是 ID 而不是名称。在前端一切正常
- docker - 如何将文件的写入权限授予 docker 用户
- python - 数据框中的列可以包含不同的数据类型项吗?
- java - 为什么将 Runnable 传递给 onAnimationEnd 不起作用?
- windows - 如何判断两个dos设备是否相等?
- ansible - 在ansible文件模块中获取差异属性
- java - 关闭对话框/警报框后如何恢复倒计时
- r - 在 data.table 中分配变量列名
- sql - SQL 中从 10-09-2020 到 2020-09-10 的日期转换