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
运行另一个查询。是的,很抱歉,我复制/粘贴了许多行并做了修改。。你可以检查我的乳房,如果它更有用的话。是的,你完全正确。。我的错误,我从未见过这个错误,因为我从未使用过这个方法。就像你说的,我应该重新考虑我的模式。