如何存储来自多个动态表单的数据使用 laravel
How to store data from multiple dynamic form use laravel
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 table 中存储数据使用 laravel 简单的方法??
在您使用转发器的表单中,这样您就无法将数据存储在产品的同一 table 中,除非您将表单数据转换为字符串 (serialize()) 并存储它在产品 table 的 'price' 行中,这是在数据库中存储数据的非常糟糕的方式。
这种情况的最佳做法是创建一个新的 table 来存储产品的不同价格,因此您的 table 应该如下所示。
产品table:
| 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|
产品价格Table:
| 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.. |
所以这样一来,一个产品可以有你想要的价格,那么你唯一要做的就是在那些table的模型中建立关系。
在产品型号中您可以添加:
public function prices() {
return $this->hasMany(ProductPrice::class, 'product_id');
}
当然,您必须创建 ProductPrice 模型才能使这种关系起作用。
我个人也会在子模型(价格模型)中添加一个反应,像这样:
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
更新:
现在您已经有了这些模型,您可以使用以下代码创建一个新的 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 看起来很有趣,这是因为您将每个价格类型的表单数据作为数组发送,所以为了使代码更清晰,您可以像这样发送表单数组:
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'],
]);
}
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 table 中存储数据使用 laravel 简单的方法??
在您使用转发器的表单中,这样您就无法将数据存储在产品的同一 table 中,除非您将表单数据转换为字符串 (serialize()) 并存储它在产品 table 的 'price' 行中,这是在数据库中存储数据的非常糟糕的方式。
这种情况的最佳做法是创建一个新的 table 来存储产品的不同价格,因此您的 table 应该如下所示。
产品table:
| 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|
产品价格Table:
| 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.. |
所以这样一来,一个产品可以有你想要的价格,那么你唯一要做的就是在那些table的模型中建立关系。
在产品型号中您可以添加:
public function prices() {
return $this->hasMany(ProductPrice::class, 'product_id');
}
当然,您必须创建 ProductPrice 模型才能使这种关系起作用。
我个人也会在子模型(价格模型)中添加一个反应,像这样:
public function product() {
return $this->belongsTo(Product::class, 'product_id');
}
更新:
现在您已经有了这些模型,您可以使用以下代码创建一个新的 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 看起来很有趣,这是因为您将每个价格类型的表单数据作为数组发送,所以为了使代码更清晰,您可以像这样发送表单数组:
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'],
]);
}