My Dynamic form use blade template
控制器代码:
$productPrice=$request->only('unit_id','size_id','color_id','price');
dd($productPrice);
控制器dd输出:
array:4 [▼
"unit_id" => array:3 [▼
0 => "3"
1 => "7"
2 => "1"
]
"size_id" => array:3 [▼
0 => "2"
1 => "1"
2 => "4"
]
"color_id" => array:3 [▼
0 => "1"
1 => "6"
2 => "9"
]
"price" => array:3 [▼
0 => "32000"
1 => "4280"
2 => "5655"
]
]
如何在product_price表中存储数据使用laravel easy方法??
答案 0 :(得分:1)
在您的表单中使用转发器,这样您就无法将数据存储在产品的同一个表中,除非您将表单数据转换为字符串(serialize())并将其存储在一个价格'产品表中的行,这是在数据库中存储数据的非常糟糕的方式。
此类情况的最佳做法是制作一个新表格来存储产品的不同价格,因此您的表格应如下所示。
产品表:
| id | product_id | unit | size | color | price |created_at| updated_at |
----------------------------------------------------------------------------
| 1 | 1 | 0 | 3 | 2 | 421 |2016-01.. |2016-01.. |
| 2 | 1 | 3 | 2 | 5 | 121 |2016-01.. |2016-01.. |
| 3 | 1 | 4 | 4 | 1 | 531 |2016-01.. |2016-01.. |
产品价格表:
public function prices() {
return $this->hasMany(ProductPrice::class, 'product_id');
}
所以这样,产品可以拥有任意数量的价格,那么你唯一需要做的就是在这些表的模型中建立关系。
在产品型号中,您可以添加:
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
当然,您必须制作ProductPrice模型才能使这种关系发挥作用。
就个人而言,我还会在子模型(价格模型)中添加一个reation,如下所示:
foreach($productPrice['unit_id'] as $k => $unit) {
$product->prices()->create([
'unit' => $productPrice['unit_id'][$k]
'size' => (isset($productPrice['size_id'][$k])) $productPrice['size_id'][$k] ? : 0;
'color' => (isset($productPrice['color_id'][$k])) $productPrice['color_id'][$k] ? : 0;
'price' => (isset($productPrice['price'][$k])) $productPrice['price'][$k] ? : 0;
]);
}
<强>更新强>
现在您已拥有这些模型,您可以使用以下代码创建新的ProductPrice项目:
productPrice[][unit_id]
productPrice[][size_id]
productPrice[][color_id]
productPrice[][price]
但正如您所看到的,这个foreach似乎很有趣,这是因为您将每种价格类型的表单数据作为数组发送,因此为了使代码更清晰,您可以发送表单数组,如下所示:
$productPrices = $request->only('productPrice');
foreach($productPrices as $productPrice) {
$product->prices()->create([
'unit' => $productPrice['unit_id'],
'size' => $productPrice['size_id'],
'color' => $productPrice['color_id'],
'price' => $productPrice['price'],
]);
}
那么你的foreach代码将如下所示:
Code