Php 如何将子集合有力地推送到其父集合中?
我不知道怎么问这个问题,但我会尽力的Php 如何将子集合有力地推送到其父集合中?,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我不知道怎么问这个问题,但我会尽力的 我的子类别表与类别表有一对一的关系 我的子类别表与 子标签表格 我的表子标签与标签 桌子 我有一个类别表 +------+--------+ + id + name + +------+--------+ +------+----------------+--------+ + id + categories_id + name + +------+----------------+--------+ Class Subcatego
- 我的
表与子类别
表有一对一的关系类别
- 我的
表与子类别
表格李>子标签
- 我的表
与子标签
桌子标签
类别
表
+------+--------+
+ 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');
}
}
我有一个子类别
表
+------+--------+
+ 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');
}
}
我有一个标签
表格
+------+--------+
+ 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');
}
}
我有一个子标签
表
+------+--------+
+ 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');
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::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
我想要的是:
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
有可能使用雄辩的语言吗?还是我必须手动执行此操作
先谢谢你第一件事!你的关系在这里是错误的:
// 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
是独立的关系,您无法使用雄辩的功能实现您的要求。您可以在集合上手动执行,但是我会重新考虑您的整个模式。您确定要所有这些子模型和表格吗
请注意,您可以使用与
类别
模型相同的表来使用子类别
模型,但要使用全局范围,正如您所知。1您可以使用('categories.subcategories.subtags')而不是那些嵌套闭包来执行。2不清楚你在问什么,所以请重新表述你的问题并添加一个例子。是的,对不起,我的词汇量有限,我没有确切的单词。我已经添加了一个例子,说明我希望雄辩的回报。不要担心vocab,我的意思是它不清楚。显示所涉及的表格以及您需要的结果。顺便说一句,Post::find($id)->with(..)->get()
有点错误-find
已经获取了结果,然后您使用get
运行另一个查询。是的,很抱歉,我复制/粘贴了许多行并做了修改。。你可以检查我的乳房,如果它更有用的话。是的,你完全正确。。我的错误,我从未见过这个错误,因为我从未使用过这个方法。就像你说的,我应该重新考虑我的模式。