如何使Eloquent在其父集合中推送子集合?

时间:2014-11-17 09:51:24

标签: php mysql laravel eloquent

我不知道怎么问这个问题,但我会尽我所能。

  • 我的Subcategories表与Categories表格有一对一的关系
  • 我的Subcategories表与many-to-many表有Subtags的关系 Subtags表。
  • 我的表one-to-manyTags的关系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?或者我是否需要手动操作?

提前谢谢

1 个答案:

答案 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 - tagssubcategories - subtags是不同的关系,因此您无法使用Eloquent功能执行您所要求的操作。您可以在集合上手动执行此操作,但我会重新考虑您的整个架构。您确定要包含所有 Sub 模型和表格吗?

请注意,您可以使用与SubCategory模型相同的表格使用Category模型,但具有全局范围,您知道。