从输入数组创建集合

时间:2014-06-27 20:47:51

标签: laravel laravel-4

假设我有一张发票的表格。它有像$ product [$ key],$ quantity [$ key]这样的订单项。因此,当提交表单时,输入看起来像

{
  customer_id : "214"
  product_id: [ "1","5", "6" ],
  quantity: ["34", "1", "54"]
}

我有一个详细信息表的模型。我一直在做的是迭代它并创建一个详细信息对象,然后像这样保存它

foreach($product as $key=>$p)
{
  if($p)
  {
    $t = new Details;
    $t->product = $p;
    $t->quantity = $quantity[$key];
    $t->save();
  }
}

我猜测有一种方法可以提高效率。就像直接从输入创建一组细节一样,但我不知道如何实现这个

2 个答案:

答案 0 :(得分:0)

您可以通过批量分配来实例化模型。

$details = new Details(['product_id'=>'1','quantity'=>'34']);

您还可以使用模型中的$ guarded变量指定不希望进行批量分配的表格列。

查看Laravel的文档中的质量分配:http://laravel.com/docs/eloquent#mass-assignment

对于您的特定问题,您似乎需要使用其他数组的元素构建输入数组。

答案 1 :(得分:0)

似乎不可能。 Here是泰勒回应问题请求。似乎问题是当时无法发射事件是不可能的。我刚刚结束了

  $d = array();
    foreach ($details as $detail) {
        $d[] = new OrderDetail($detail);
    }
  $order->details()->saveMany($d);