9

最近、Laravel4 を使い始めました。多対多の関係の場合、ピボット テーブル データの更新中に問題に直面しています。

状況は次のとおりです: ProductProductTypeの 2 つのテーブルがあります。それらの間の関係は多対多です。私のモデルは

class Product extends Eloquent {
    protected $table = 'products';
    protected $primaryKey = 'prd_id';

    public function tags() {
        return $this->belongsToMany('Tag', 'prd_tags', 'prta_prd_id', 'prta_tag_id');
    }
}

class Tag extends Eloquent {
    protected $table = 'tags';
    protected $primaryKey = 'tag_id';
        public function products()
    {
    return $this->belongsToMany('Product', 'prd_tags', 'prta_prd_id', 'prta_tag_id');
    }
}

ピボット テーブル prd_tags にデータを挿入しているときに、次のことを行いました。

$product->tags()->attach($tag->tagID);

しかし、このピボット テーブルのデータを更新したいのですが、データをピボット テーブルに更新する最良の方法は何ですか。たとえば、いくつかのタグを削除し、特定の商品に新しいタグを追加したいとします。

4

5 に答える 5

36

古い質問ですが、2013 年 11 月 13 日に updateExistingPivot メソッドが多対多の関係で公開されました。これはまだ公式ドキュメントにはありません。

public void updateExistingPivot(mixed $id, array $attributes, bool $touch)

-- テーブルの既存のピボット レコードを更新します。

2014 年 2 月 21 日以降、3 つの引数すべてを含める必要があります。

あなたの場合(ピボットフィールド「foo」を更新したい場合)、次のことができます:

$product->tags()->updateExistingPivot($tag->tagID, array('foo' => 'value'), false);

または、親のタイムスタンプに触れたい場合は、最後のブール値 false を true に変更できます。

プルリクエスト:

https://github.com/laravel/framework/pull/2711/files

于 2014-02-21T18:29:02.057 に答える
6

laravel 5.0以降で作業する際の別の方法

$tag = $product->tags()->find($tag_id);
$tag->pivot->foo = "some value";
$tag->pivot->save();
于 2016-02-17T18:31:04.390 に答える
5

これは古い質問であることは知っていますが、それでも解決策に興味がある場合は、次のとおりです。

ピボット テーブルに追加の属性として「foo」と「bar」があるとします。これを実行して、そのテーブルにデータを挿入できます。

$product->tags()->attach($tag->tagID, array('foo' => 'some_value', 'bar'=>'some_other_value'));
于 2013-12-12T13:18:40.457 に答える