我有以下架构:
对象表
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_id
和 tag_id
与这些参数匹配或将它们留空时,都会导致数据透视表上的一个或多个字段为 0
. 根本没用 .
我应该在什么顺序指定每个参数?
1 回答
你有没有尝试过将它们留空? Laravel已经根据关系的表名做出了外国和本地/其他关键假设 . 例如,由于
objects
表模型名称为Object
,因此将猜测外键名为object_id
. 此外,由于tags
型号名称为Tag
,因此对于关系中的本地/其他键,它将猜测tag_id
.如果要手动填充它们,则需要插入指示关系如何链接的列名称 . 例如: