我不知道如何问这个问题,但我会尽力。
- 我的
Subcategories
表与Categories
表具有一对一关系 - 我的
子类别
表与子标签
表。 - 我的表
Subtags
与Tags
存在一对多
关系 表。
我有一个类别
表
+------+--------+
+ id + name +
+------+--------+
我有一个子类别
表
+------+----------------+--------+
+ 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');
}
}
我有一个标签
表
+------+--------+
+ id + name +
+------+--------+
Class Tag {
public function subtag()
{
return $this->hasMany('Subtag', 'tags_id', 'id');
}
}
我有一个子标签
表
+------+----------+--------+
+ 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');
此查询会返回什么 Eloquent:
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
我想要什么:
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
可以使用 Eloquent 吗?或者我必须手动执行此操作?
提前谢谢
最佳答案
要事第一!你的关系在这里是错误的:
// Subtag model
public function tag()
{
return $this->hasOne('Tag', 'id', 'tags_id');
}
应该是:
public function tag()
{
return $this->belongsTo('Tag', 'tags_id', 'id');
}
现在,由于子类别 - 标签
和子类别 - 子标签
是独立的关系,因此您无法使用 Eloquent 功能执行您所要求的操作。您可以在集合上手动执行此操作,但是我会重新考虑您的整个架构。您确定需要所有这些子模型和表格吗?
请注意,您可以使用 SubCategory
模型,使用与 Category
模型相同的表,但具有全局范围,只是为了让您知道。
关于php - 如何让 Eloquent 将子集合推送到其父集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26969854/