【问题标题】:How to recursively get records in Laravel?如何在 Laravel 中递归获取记录?
【发布时间】:2017-02-20 12:25:18
【问题描述】:

我的应用中有名为帖子的实体。帖子可以是其他帖子的子帖子,因此父帖子有 hasMany('posts'),子帖子有 hasOne('post'),包含是无限的。

这是架构:

如何递归地获取第一个“post_id”设置为空的帖子的所有孩子和孩子的孩子等?

请不要在这里评论性能,我知道这样的模式很糟糕,我只想知道如何正确编写递归函数来检索无限嵌套的帖子。

比如说,我有第一篇文章 1。
帖子 2 和 3 是帖子 1 的子项。
帖子 4 和 5 是帖子 2 的子项。
帖子 6 和 7 是帖子 3 的子项。
帖子 8,9,10 是帖子 5 的子项。
帖子 11、12、13 是帖子 7 的子项。
帖子 14 是帖子 10 的子项。
我想编写一个递归函数,让我发布 2-14 个帖子。

【问题讨论】:

  • 这个逻辑设计似乎没有经过深思熟虑。我可以问为什么嵌入这么深的帖子吗?在 Facebook 上,他们在父帖子中深度嵌入 2 个(父 -> 评论 -> 评论评论)
  • 在这种情况下您必须使用 hasMany 是不正确的,因为帖子 1 有 2 个孩子。
  • @Derek 请忘记为什么会这样,以及性能。这里不是这样。对我来说最重要的是编写递归函数。关于模式,它不是一个真正的用例。
  • 对于真正有效的事情,您的数据库中可能应该有两个字段,parent_postsub_parent_post - 第一个将是它所属的顶级帖子 ID,第二个将成为它的直接后父母
  • 显示您尝试过的方法以及为什么它不起作用。 Stackoverflow 不是代码编写服务。

标签: laravel eloquent


【解决方案1】:

由于您明确要求我们不要对性能发表评论,您应该在帖子模型上添加一个with 属性,以便热切地包含所有孩子。

class Post extends Model
{

   protected $with = [
        'posts'
   ];

   public function posts() {
        return $this->hasMany(Post::class);
    }

}

【讨论】:

  • 非常感谢,正是我正在寻找的。​​span>
猜你喜欢
  • 2019-09-21
  • 2015-03-03
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2018-05-14
  • 2023-03-22
  • 1970-01-01
  • 2019-12-09
相关资源
最近更新 更多