如何存储来自多个动态表单的数据使用 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'],
    ]);
}