2017-12-14 36 views
0

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'); 
    } 

を、私は、フィールド「量」を更新しようとするたびに古い値です。私は間違って何をしていますか?

+0

updateExistingPivotは、最初の引数としてidをとります。数量を渡しています。 – Devon

+0

最初の引数は更新する値ではなく、 'belongsToMany'内の他のモデルの識別子ですので、ピボットテーブルを更新するピボットを知ることができます。[ラベラードキュメント - ピボットテーブルのレコードの更新](https:// laravel .com/docs/5.5/eloquent-relationships#update-many-to-many-relationships) – lagbox

+0

しかし、私は2つの外部キーと追加の列 "quantity"を持つピボットを持っているので、updateExistingPivotメソッドのパラメータは何か好き? ありがとうございます; – Magda

答えて

0

各請求書には複数のアイテムがある場合があるため、そのキーでアイテムの数量をループして更新することができます。

$request->quantityが返されているかどうかわかりません。正しい項目を更新するためには、追加のロジックが必要な場合があります。

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

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

すべては大丈夫です、ありがとうございます;) – Magda

関連する問題