【问题标题】:how to store an array value from blade to database in Laravel如何在 Laravel 中将数组值从刀片存储到数据库
【发布时间】:2022-01-14 06:41:32
【问题描述】:

提交动态表单但无法将值存储到数据库。我是初学者,我坚持了 2,3 天,但无法解决问题。

请求值就像 {"_token":"PTGmyf3UZrD1TgKDJcREcKia9VFRLYaP5kNaAkAU","id":["28","31"],"name":["Fogg","zack"],"rate":["70","5000"] ,"数量":["1","1"],"提交":"提交"}


  <form name="" id="form" action="{{ url('/store_order_item') }}" method="POST">  
  @csrf
<table class="table table-bordered" id="dynamic_field">
 <thead>
   <tr>
     <th>Product Id</th>
     <th>Name</th>
     <th>Rate</th>
     <th>Quantity</th>
     <th>Amount</th>
     <th>Action</th>
   </tr>
 </thead>

  <tbody>
    
  </tbody>
    
</table> 
<h6>Grand Total: <span id= "grandtotal"></span> </h6>
<input type="button" name="" id="" class="btn btn-sm btn-danger" value="Cancel">  
<input type="submit" name="submit" id="submit" class="btn btn-sm btn-secondary" value="Submit"/>  

</form>  
</div>

<script type="text/javascript">

  var i = 1;
  
    $(document).ready(function(){
    
      var button_id1 ;

    $('#button').click(function(){

  let namesearch = $('#search').val();
 
  let idsearch = $('#idsearch').val();

  if ((namesearch == '')&&(idsearch == '')){
      return false;
    }

  $.ajax({
      type:"GET",
      url: "/pos_search_ajax",
      data: { name: namesearch, id: idsearch },
    
      success: function(response) {
        $('#dynamic_field').append('<tr id="row_'+i+'"><td><input id="id_'+i+'" type="text" name="id[]" value="'+response[0].id+'" readonly></td><td><input id="name_'+i+'" name="name[]" type="text" value="'+response[0].name+'" readonly></td><td> <input id="rate_'+i+'" name="rate[]" type="text" value="'+response[0].price+'" readonly></td><td><input id="quantity_'+i+'" onchange="change('+i+')" name="quantity[]" type="number" min=1 value="1"></td><td class="total" id="total_'+i+'" name="total[]">'+response[0].price+'</td><td>  <button type="button" onclick="remove_tr('+i+')"  class="btn btn-danger btn-sm">Delete</button></td></tr>'); 
        
        total();
       
        i++; 
      }   
  }); 

# this is the Controller #

public function store(Request $request)
    {  
        foreach($request->all() as $itm)
        {
            $items = New OrderItem();
            $items->product_id = $request->id;
            $items->name = $request->name;
            $items->save();
        }
   }

【问题讨论】:

    标签: javascript jquery ajax laravel


    【解决方案1】:

    如果您的request 总是这样格式化,那么使用foreach($request-&gt;all() as $itm) 只会返回您发送的内容,id 的值将是["28","31"] 等等。所以你可以尝试这样的事情:

    $data = $request->all();
    for ($i=0; $i < count($data['id']); $i++) { 
        $item = new OrderItem();
        $item->product_id = $data['id'][$i];
        $item->name = $data['name'][$i];
        $item->save();
    }
    

    该代码将遍历 id,并且产品名称必须与 id 的顺序相同。

    【讨论】:

    • 我在替换 Trying to get property 'id' of non-object 时得到了这个
    • @thtom 已更新。尝试将$data 作为数组而不是对象。
    • 试图获取非对象的属性“id”。还是有这个
    • 那么你必须确定,如果数据发送到服务器。尝试在for 语句之前添加dd($data);
    • array:6 [▼ "_token" => "7nKh4HBCFqKKIQFz2HUplzZg987HQ1wVzNmsCG1F" "id" => array:2 [▼ 0 => "31" 1 => "30" ] "name" => array :2 [▼ 0 => "zack" 1 => "xzmen" ] "rate" => array:2 [▼ 0 => "5000" 1 => "5000" ] "quantity" => array:2 [▼ 0 => "1" 1 => "1" ] "提交" => "提交" ]
    【解决方案2】:

    具有相同名称的多个请求参数需要在其名称属性上附加数组符号([]),而您这样做是正确的,例如&lt;input name="name[]" ...
    这使得参数是数组。 (不是单个值)

    所以当你访问参数时,你需要使用索引号再访问1个深度(以获得第n个项目)。
    要访问所有项目,您需要循环该参数。

    而且参数不只是一个(id,name,rate,quantity),需要一个参数作为循环的依据。
    基础参数可以是任何东西,但通常首选标识符。 (例如,id)

    编写您自己的代码类似于@TheArka 的答案。 但建议你知道这是怎么回事,为什么会这样。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 2016-10-06
      • 2018-01-15
      • 2019-08-06
      • 2021-06-19
      • 2020-04-09
      相关资源
      最近更新 更多