Php 如何使用laravel存储来自多个动态表单的数据
控制器代码:Php 如何使用laravel存储来自多个动态表单的数据,php,laravel,laravel-5.3,laravel-blade,dynamic-forms,Php,Laravel,Laravel 5.3,Laravel Blade,Dynamic Forms,控制器代码: $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 =
$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 table中存储数据使用laravel简易方法???在您的表单中,您可以使用中继器,这样您就无法将数据存储在产品的同一个表中,除非您将表单数据转换为字符串(serialize())并将其存储在product表的“price”行中,这是在DB中存储数据的非常糟糕的方法 这种情况下的最佳实践是创建一个新表来存储产品的不同价格,因此您的表应该如下所示 产品表:
| id | name | more columns | created_at | updated_at |
----------------------------------------------------------------------------
| 1 |"product1" | 0 |2016-01-31 00:27:16 |2016-01-31 00:27:16|
| 2 |"product2" | 1 |2016-01-31 00:27:16 |2016-01-31 00:37:16|
| 3 |"product3" | 0 |2016-01-31 00:27:16 |2016-01-31 01:47:04|
产品价格表:
| 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');
}
当然,为了使这种关系起作用,你必须建立ProductPrice模型
我个人还想在子模型(价格模型)中添加一个reation,如下所示:
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
productPrice[][unit_id]
productPrice[][size_id]
productPrice[][color_id]
productPrice[][price]
$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'],
]);
}
更新:
现在您已经有了这些模型,您可以使用以下代码创建新的ProductPrice项目:
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;
]);
}
但是正如您所看到的,这个foreach看起来很有趣,这是因为您将每种价格类型的表单数据作为数组发送,因此为了使代码更干净,您可以像这样发送表单数组:
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
productPrice[][unit_id]
productPrice[][size_id]
productPrice[][color_id]
productPrice[][price]
$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代码将如下所示:
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
productPrice[][unit_id]
productPrice[][size_id]
productPrice[][color_id]
productPrice[][price]
$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'],
]);
}
给我看一下你的表单字段或者告诉我你有哪些模型来获取你的信息我的数据库结构和你在这里描述的一样。感谢您的帮助@yohanan baruchelhow查看我的更新表单,以及一组表单删除按钮,如我的表单图片()抱歉,我无法理解您关于删除按钮的问题。。你想做什么?我在拉雷维尔和stackoverflow也是新来的,但是试着开发一个电子商务作为拉雷维尔项目的演示@yohanan baruchelse