Laravel更新数据透视表

时间:2017-12-14 16:27:09

标签: laravel

在laravel中,我试图从数据透视表中更新一行。我有这种关系:

Invoice.php

class Invoice extends Model
{
    public function items() {
      return $this->belongsToMany('App\Item', 'invoice_items', 'invoice_id', 'item_id')->withPivot('quantity');
  }

Item.php

class Item extends Model
{
  public function invoices() {
      return $this->belongsToMany('App\Invoice' ,'invoice_items', 'item_id', 'invoice_id')->orderBy('created_at', 'desc')->withPivot('quantity');
    }
}

InvoiceItem.php

 class InvoiceItem extends Pivot
    {
      protected $fillable = [
        'quantity',
      ];

      public function __construct(Model $parent, array $attributes,
                                  $table, $exists = false)
      {
        parent::__construct($parent, $attributes, $table, $exists);
      }
    }

并且在InvoicesController.php中我有方法更新:

public function update(Request $request, $id)
  {

    $invoice = Invoice::findOrFail($id);
    $invoice->update([
      'number' => $request->number,
      'status' => $request->status,
      'place_issue' => $request->place_issue,
      'date_issue' => $request->date_issue,
      'date_payment' => $request->date_payment,
      'description' => $request->description,
      'company_id' => $request->company_id,
      'user_id' => $request->user_id,
    ]);

    Invoice::find($id)->items()->updateExistingPivot($request->quantity, ['quantity' => $request->quantity]);

    return redirect('listInvoice');
  }

每次我尝试更新字段"数量"是旧的价值。我做错了什么?

1 个答案:

答案 0 :(得分:1)

由于每张发票可能包含多个商品,您可以通过其键遍历并更新商品的数量。

我不确定$request->quantity正在返回什么。您可能需要一些额外的逻辑来确保更新正确的项目。

$items = $invoice->items->pluck('name', 'id')->toArray();

foreach ($items as $key => $item) {
    $invoice->items()->updateExistingPivot($key, ['quantity' => $request->quantity]);
}