在同一模型中使用多对多关系的正确方法是什么

时间:2019-01-19 20:53:55

标签: laravel eloquent many-to-many

我正在尝试在同一口才模型上使用多对多关系。该模型代表商店中的一件商品,并且可能与许多其他商品相关。

这是RelatedItem模型的当前迁移:

Schema::create('related_items', function (Blueprint $table) {
            $table->primary(['item_id', 'related_id']);
            $table->integer('item_id')->unsigned()->index();
            $table->foreign('item_id')->references('id')->on('items');
            $table->integer('related_id')->unsigned()->index();
            $table->foreign('related_id')->references('id')->on('items');
            $table->timestamps();
        });

这是Item模型中的关系:

public function related()
    {
        return $this->belongsToMany('App\Item', 'related_items', "related_id");
    }

我已经通过DatabaseSeeder创建了一些关系,这些关系将这些记录注入到我的数据库中:

DB::table('related_items')->insert([
            'item_id' => 0,
            'related_id' => 1,
        ]);
        DB::table('related_items')->insert([
            'item_id' => 0,
            'related_id' => 2,
        ]);

我希望获得2个相关项,但是两次获得ID为0的项(这是从中调用该关系的项)。

我的代码有错吗? 预先感谢。

1 个答案:

答案 0 :(得分:1)

related_id指定为第四参数:

public function related()
{
    return $this->belongsToMany('App\Item', 'related_items', null, 'related_id');
}