Laravel belongsToMany 在多对多关系中的枢轴 table id 上插入“0”?
Laravel belongsToMany inserting '0' on pivot table ids in a many to many relationship?
我有以下架构:
一个objects
table
Schema::create('objects', function(Blueprint $table) {
$table->increments('object_id');
});
与以下关系:
public function tags() {
return $this->belongsToMany('Tag', 'objects_tags_pivot', '?', '?');
}
A tags
table:
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
与这些参数匹配,或将它们留空,都会导致枢轴 table 上的一个或多个字段为 0
。一点用都没有。
我应该按什么顺序指定每个参数?
你试过让它们为空吗? Laravel 已经根据关系的 table 名称做出了外部和本地/其他关键假设。例如,由于 objects
table 模型名称是 Object
它会猜测外键名为 object_id
。此外,由于 tags
模型名称是 Tag
,它会猜测 tag_id
作为关系中的本地/其他键。
如果您想手动填写它们,您需要插入表明关系如何链接的列名。例如:
public function tags()
{
$this->belongsToMany('Tag', 'objects_tag_pivot', 'object_id', 'tag_id');
}
我有以下架构:
一个objects
table
Schema::create('objects', function(Blueprint $table) {
$table->increments('object_id');
});
与以下关系:
public function tags() {
return $this->belongsToMany('Tag', 'objects_tags_pivot', '?', '?');
}
A tags
table:
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
与这些参数匹配,或将它们留空,都会导致枢轴 table 上的一个或多个字段为 0
。一点用都没有。
我应该按什么顺序指定每个参数?
你试过让它们为空吗? Laravel 已经根据关系的 table 名称做出了外部和本地/其他关键假设。例如,由于 objects
table 模型名称是 Object
它会猜测外键名为 object_id
。此外,由于 tags
模型名称是 Tag
,它会猜测 tag_id
作为关系中的本地/其他键。
如果您想手动填写它们,您需要插入表明关系如何链接的列名。例如:
public function tags()
{
$this->belongsToMany('Tag', 'objects_tag_pivot', 'object_id', 'tag_id');
}