【问题标题】:How to insert an array into different rows?如何将数组插入不同的行?
【发布时间】:2018-08-06 00:02:04
【问题描述】:

我尝试了我在研究过程中发现的所有解决方案,但似乎没有什么对我有用。这是我正在尝试做的事情的概述。作为管理员,我控制客户的活动。客户是提出请求的人,我作为管理员批准该请求。
桌子

编号 |客户 ID | Bearer_id |状态
包装_产品
编号 | package_id |产品ID |数量

刀片
在我的刀片中,我做了一个 foreach 来显示当前在客户购物车上的当前产品。此刀片已在当前选定客户的页面上。

<div class="panel-wrapper collapse in">
    <div class="panel-body">
        {!!Form::open(array('route'=>'storeProduct', 'id' => 'example-advanced-form', 'method' => 'post'))!!}
            <div class="table-wrap">
                <div class="table-responsive">
                    <table id="datable_1" class="table table-hover display  pb-30" >
                        <table class="table">
                            <thead>
                                <tr>
                                    <th>Name</th>
                                    <th>Qty</th>
                                    <th class="column-spacer"></th>
                                </tr>
                            </thead>
                                <input type="hidden" name="customerid" value="{{$customers->id}}">
                                    @foreach($customers->products as $product)
                                        <tbody>
                                            <tr>
                                                <td><input type="hidden" name="productid[]" value="{{$product->id}}">{{$product->name}}</td>
                                                <td><input type="hidden" name="qty[]" value="{{$product->pivot->qty}}">{{$product->pivot->qty}}</td>
                                            </tr>
                                        </tbody>
                                        @endforeach
                                    </table>
                                    <br>
                                </div>
                                @include('errors.list')
                                <fieldset>
                            <div class="row">
                            <center>{!!Form::submit('Process', array('class' => 'btn btn-primary'))!!}</center>
                        </div>  
                    </fieldset>
                </div>
            {!!Form::hidden('_token', csrf_token())!!}
            {!!Form::close()!!}
        </div>
    </div>

我使用了 dd(),它显示了产品数组。我可以毫无问题地将请求的数据插入到 packages 表中,但是在将产品数组插入到 package_products 表中时,它只插入最后一行。我需要将这些产品插入不同的行。我缺什么?
控制器

public function storeProduct(Request $request)
{
  try{
    $package = $this->package;
    $productid = $request['productid'];
    $qty = $request['qty'];
    $bearer = Bearer::status()->package()->first();
    $package->customer_id = $request['customerid'];
    $package->bearer_id = $bearer->id;
    $package->status = 'pending';
    $package->save();

    if ($package->save()){
      $id = $package->id;
      $packageproducts = [];

      $packageproducts = [
        'package_id'=>$id,
        'product_id'=>$productid,
        'qty'=>$qty];
        DB::table('package_products')->insert($packageproducts);
      }
      return redirect()->route('index')->with('message', 'Package Successfully Added');
    }
    catch(Exception $e){
      return redirect()->back()->withErrors(['Error']);
    }
  }

【问题讨论】:

  • 您正在保存$package-&gt;save() 两次
  • 你在哪里分配 $packageproducts 数组中的值,你正在插入?
  • @AfshanShujat 抱歉,我仍在重命名我的表格。我编辑了它 $packageproducts。 Akintunde007 哦,我不知道没有那个我还能保存它,谢谢,但它仍然插入最后一行。

标签: php html laravel


【解决方案1】:

假设你已经正确设置了与包和产品模型相关的 eloquent 模型,就这么简单。

$package = App\Models\Package::first();

$package->products()->attach($packageProducts);

【讨论】:

  • 我是 laravel 的新手,我需要一个数据透视表来执行它吗?我打算为这个功能使用查询生成器,我还不知道如何很好地使用 eloquent。
  • 这方面的文档相当简单。相信我,这会让你的生活更轻松,因为所有的辛苦工作都由 laravel 在幕后处理。这就是为什么我们最终会使用框架的原因。不要偷懒,看看这个;)laravel.com/docs/5.6/eloquent-relationships
  • 好的,问一个问题,如果我有多对多关系,我真的需要实现一个数据透视表吗?或者我的表可以吗?
  • 对于多对多来说,您肯定需要一个数据透视表。对于一对多来说,你的桌子还可以。如果一个产品可以属于多个包,而一个包可以包含多个产品,那么您肯定应该有一个数据透视表。
  • 我试过了,它返回一个完整性约束违规
【解决方案2】:

我终于找到了解决方案,我缺少的是在我的函数中放置一个 for 循环,以便它获取我想要的数组并将其保存到我数据库中的不同行中。这是我的答案

public function storeProduct(Request $request)
{
try{
$package = $this->package;
$productid = $request['productid'];
$qty = $request['qty'];
$bearer = Bearer::status()->package()->first();
$package->customer_id = $request['customerid'];
$package->bearer_id = $bearer->id;
$package->status = 'pending';

if ($package->save()){
  $id = $package->id;
  $packageproducts = [];
  for(i=0; < count($productid); $i++){
  $packageproducts[] = [
    'package_id'=>$id,
    'product_id'=>$productid[$i],
    'qty'=>$qty[$i],];
    }
    DB::table('package_products')->insert($packageproducts);
  }
  return redirect()->route('index')->with('message', 'Package Successfully Added');
}
catch(Exception $e){
  return redirect()->back()->withErrors(['Error']);
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2012-07-23
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多