Laravel - foreach中的简单foreach - 不使用firstOrNew更新模型

时间:2018-04-10 14:03:24

标签: php laravel laravel-5 laravel-eloquent

非常简单的任务。从API获取多个数据(发票)。

foreach($items->data as $item) {
        $invoice = Invoice::firstOrNew(array('invoice_number' => $item->DocumentNo));
        $invoice->total = $item->GrandTotal;
        $invoice->save();
        $m = 0;

        foreach ($item->lines as $product) {
          $productModel = Product::find(1)->where('unique_id', '=', $product->Product)->first();
          if(isset($productModel)) {
              $productToInvoice = ProductToInvoice::firstOrNew(array('product_id' => $productModel->product_id, 'invoice_id' => $invoice->id));
              $productToInvoice->total = $product->LineNetAmt;
              $productToInvoice->quantity = $product->QtyEntered;
              $productToInvoice->price = $product->PriceEntered;
              $productToInvoice->save();
          }
          $m++;
        }
}

$item->lines是发票内的产品。来自API的数据。我使用以下行将此数据连接到Product模型: $productModel = Product::find(1)->where('unique_id', '=', $product->Product)->first();

当发票不存在时,一切似乎都没问题。产品系列正确添加。 如果发票存在(以及产品系列):它会更新行,但totalquantityprice对所有行都相同。

编辑:如果你在循环中var_dump($m) - 它将打印0,1(对于2行),但如果你保存,例如productToInvoice->price = $m,它将为每个条目/行保存1。 / p>

我到底错在了什么?

2 个答案:

答案 0 :(得分:0)

你应该试试这个:

$productToInvoice->total = $productModel->LineNetAmt;      // $productModel insted of $product
$productToInvoice->quantity = $productModel->QtyEntered;  // $productModel insted of $product
$productToInvoice->price = $productModel->PriceEntered;   // $productModel insted of $product

答案 1 :(得分:0)

我认为这就是这条线 Product::find(1) 您每次都找到id 1的产品。 那条线应该是

$productModel = Product::where('unique_id', '=', $product->Product)->first();