我不知道怎么问这个问题,但我会尽我所能。
Subcategories
表与Categories
表格有一对一的关系Subcategories
表与many-to-many
表有Subtags
的关系
Subtags
表。 one-to-many
与Tags
的关系Categories
表我有+------+--------+
+ id + name +
+------+--------+
表
Subcategories
我有+------+----------------+--------+
+ id + categories_id + name +
+------+----------------+--------+
Class Subcategory {
public function category()
{
return $this->hasOne('Category', 'id', 'categories_id');
}
public function subtags()
{
return $this->belongsToMany('Subtag', 'subcategories_has_subtags', 'subcategories_id', 'subtags_id');
}
}
表
Tags
我有+------+--------+
+ id + name +
+------+--------+
Class Tag {
public function subtag()
{
return $this->hasMany('Subtag', 'tags_id', 'id');
}
}
表
Subtags
我有+------+----------+--------+
+ id + tags_id + name +
+------+----------+--------+
Class Subtag {
public function subcategories()
{
return $this->belongsToMany('Subcategory', 'subcategories_has_subtags', 'subtags_id', 'subcategories_id');
}
public function tag()
{
return $this->hasOne('Tag', 'id', 'tags_id');
}
}
表
Post::find($id)->with('categories.subcategories.subtags');
我有这个问题:
Post Collection Test
=> Category Collection
=> Subcategory Collection
=> Subtag Collection 1
=> Tag Collection (tags_id) 1
=> Subtag Collection 2
=> Tag Collection (tags_id) 1
=> Subtag Collection 3
=> Tag Collection (tags_id) 1
=> Subtag Collection 4
=> Tag Collection (tags_id) 2
Eloquent以此查询返回的内容:
Post Collection Test
=> Category Collection
=> Subcategory Collection
=> Tag Collection (tags_id) 1
=> Subtag Collection 1
=> Subtag Collection 2
=> Subtag Collection 3
=> Tag Collection (tags_id) 2
=> Subtag Collection 4
我想要的是什么:
{{1}}
是否可以使用Eloquent?或者我是否需要手动操作?
提前谢谢
答案 0 :(得分:0)
首先要做的事情!你的关系在这里错了:
// Subtag model
public function tag()
{
return $this->hasOne('Tag', 'id', 'tags_id');
}
它应该是:
public function tag()
{
return $this->belongsTo('Tag', 'tags_id', 'id');
}
现在,由于subcategories - tags
和subcategories - subtags
是不同的关系,因此您无法使用Eloquent功能执行您所要求的操作。您可以在集合上手动执行此操作,但我会重新考虑您的整个架构。您确定要包含所有 Sub 模型和表格吗?
请注意,您可以使用与SubCategory
模型相同的表格使用Category
模型,但具有全局范围,您知道。