如何基于一个ID列表动态插入多行

时间:2018-11-06 01:51:57

标签: php mysql sql

这是我的html表单,其中包含动态字段数组。换句话说,可以动态生成字段。     

<form>
 |Product
 <input type="text" name="Product[Name][]">  
 <input type="text" name="Product[Number][]">  
  <input type="text" name="Product[Description][]"> 

 |Product Accessories
 <input type="text" name="Accessory[Name][]">  
 <input type="text" name="Accessory[Number][]">  
  <input type="text" name="Accessory[Description][]"> 
</form>

这是我的PHP从HTML数组获取值。

 <?php
 $product = $_POST['Product'];
 $accessory = $_POST['Accessory'];

 if ($this->hasValueAndNotEmpty($product)) {
   foreach($product as $key=>$productItem)
   {
      //Issue: How do I use the product id to insert accessories
      /*Maybe like this..*/
     foreach($accessory as $$accessoryItem){

     } 


   } 
}

数据库方案如下:

Product 表格

  id 
  name 
  number 
  description
..... 

Product_Accessories 表格

   id
   product_id
   name
   number

我的目标是将与它们所属的Product_Accessories相匹配的所有附件插入product_id表中。

在sudo代码中将是:

  1. 用户指定了2种产品
  2. 这2个产品有4个配件(每个2个)
  3. 在插入附件之前,请检查是否确实有附件 指定。
  4. 插入与HTML表单中指定的产品相匹配的配件。

    以下代码根据我要完成的工作而工作,但是我不确定如何提取附件字段值。

     $fields = array_combine(array_keys($product_fields),
      array_values($product_fields));
      $product (model) after inserting first.
    
    
        foreach($product as $key => $productItem) {
    
       if ($this->hasValue($fields)) {
    
    
           for ($i = 0; $i < count($key); $i++) {
    
           }
    
    
           var_dump($productItem->accessory()->create([
    
               'name' => 'kllk',
               'number' => 'fddfl',
               'description' => 'dfldfkl',
           ]));
    
       }
    
     }
    

    当我去查看附件表时,它确实插入了具有相应product_id的附件,但是不知道如何插入实际附件字段值。

1 个答案:

答案 0 :(得分:0)

我有两种可以使用的解决方案。

1)使用AJAX和数据属性来区分哪个附件属于哪个项目。

2)在产品中包括具有唯一ID的隐藏文本字段。创建新的附件字段时,请确保它们也具有相同的唯一ID。

<form>
 |Product
 <input type="text" name="Product[Name][]">  
 <input type="text" name="Product[Number][]">  
 <input type="text" name="Product[Description][]"> 
 <input type="hidden" name="Product[uuid][]" value="12345"> <!-- this should be generated --> 

 |Product Accessories
 <input type="text" name="Accessory[Name][]">  
 <input type="text" name="Accessory[Number][]">  
 <input type="text" name="Accessory[Description][]"> 
 <input type="hidden" name="Accessory[uuid][]" value = "12345"> <!-- this should be copied from the product which the accessory belongs to -->  
</form>

然后在php中,您可以首先插入所有产品,然后创建一个数组,该数组指向数据库中uuid属于哪个id

如果上述产品已插入ID为2的数据库中,

$uuid_id = [ '12345' => 2 ];

然后为您的Accessory Array使用foreach循环,并使用uuid值加载产品ID。 $product_id = $uuid_id[ UUID ];

对于UUID,请使用当前时间,因此它始终是唯一的。

 new Date().getTime(); //for JavaScript

microtime(true); //for php