首页 文章

Laravel属于ToMany在多个关系中的数据透视表id上插入'0'?

提问于
浏览
0

我有以下架构:

对象表

Schema::create('objects', function(Blueprint $table) {
        $table->increments('object_id');
    });

具有以下关系:

public function tags() {
    return $this->belongsToMany('Tag', 'objects_tags_pivot', '?', '?');
}

A标签表:

Schema::create('tags', function(Blueprint $table) {
        $table->increments('tag_id');
    });

具有以下关系:

public function objects() {
    return $this->belongsToMany('Object', 'objects_tags_pivot', '?', '?');
}

他们之间的关系为多对多的关系呈现:

Schema::create('objects_tags_pivot', function(Blueprint $table) {
        $table->increments('object_tags_id');
        $table->integer('object_id')->unsigned();
        $table->integer('tag_id')->unsigned();
    });

我的问题是在目前有问号的关系参数中插入什么? Laravel 4.2文档建议第三个参数是 $foreignKey ,第四个参数是 $localKey . 这不是很有帮助 .

每次尝试将 object_idtag_id 与这些参数匹配或将它们留空时,都会导致数据透视表上的一个或多个字段为 0 . 根本没用 .

我应该在什么顺序指定每个参数?

1 回答

  • 1

    你有没有尝试过将它们留空? Laravel已经根据关系的表名做出了外国和本地/其他关键假设 . 例如,由于 objects 表模型名称为 Object ,因此将猜测外键名为 object_id . 此外,由于 tags 型号名称为 Tag ,因此对于关系中的本地/其他键,它将猜测 tag_id .

    如果要手动填充它们,则需要插入指示关系如何链接的列名称 . 例如:

    public function tags()
    {
         $this->belongsToMany('Tag', 'objects_tag_pivot', 'object_id', 'tag_id');
    }
    

相关问题