php - 如何让 Eloquent 将子集合推送到其父集合中?

标签 php mysql laravel eloquent

我不知道如何问这个问题,但我会尽力。

  • 我的 Subcategories 表与 Categories 表具有一对一关系
  • 我的子类别表与 子标签表。
  • 我的表SubtagsTags 存在一对多 关系 表。

我有一个类别

+------+--------+
+  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/

相关文章:

MySQL:如何引用 SELECT 查询中已经提到的项目

mysql - 如何修复 SQL 中的 'Failed to add the foreign key'

PHP 5.3.18 Mcrypt 错误 : Cannot open source device

php - 我想在 laravel 的 mongodb 数据中添加数组

php - 细粒度的访问控制

javascript - 如何允许我的 PHP 文件仅在 Iframe 中加载

php - 如何从 PHP session 数组中删除变量

mysql - 从数百万行中考虑客户的时区

PHP for-loop with MySQL 行取决于 MySQL 查询结果

php - Laravel 5.4 邮件消息如何编辑页眉和页脚