如何在拉拉维(Laravel)环游子孙

时间:2019-11-28 12:26:43

标签: php laravel eloquent

我正在尝试找到一种方法来\App\Goal::find(1)->children并让所有孩子以及孩子们的孩子归还。

我要粘贴下面的数据库 \App\Goal::find(1)->children 返回 2, 4 and 5。目前,我只能做\App\Goal::find(1)->goals,它只返回2 and 4

我有一个这样的数据库:

id          user_id     goal_id     objective
1            1             NULL        Get rich
2            1              1          Save $5
3            1              NULL       Learn to cook
4            1              1          Save $10,000
5            1              4          Buy stocks
6            1              5          Buy 5x Intel
7            1              5          Buy 5x AMD

您将如何在目标模型中创建children()函数?

请询问是否缺少任何重要信息

编辑:

Goal.php:

public function user()
{
    return $this->belongsToUser(User::class);
}

public function goals()
{
    return $this->hasMany(Goal::class, 'goal_id')
}

当我在GoalController中运行\ App \ Goals :: find(1)-> goals时,它将返回自身的子代(示例数据库表中ID为2和4的子代),但不返回其子代...

示例表中的ID 5的父ID为4,本身的父ID为1。

那么我怎么能得到\App\Goal::find(1)->children\App\Goal::find(1)->goals来归还其子孙及其子女等?

1 个答案:

答案 0 :(得分:0)

因此,假设您发布的表是与warden相关的goals表...

如果您在模型上设置了以下两个关系:

App\Goal

您可以调用public function children() { return $this->hasMany(Goal::class, 'parent_id'); } public function childrenRecursive() { return $this->children()->with('children'); } ,该方法将返回所有子代和所有子代子代的嵌套集合。

如果您希望将所有子级排列成一个平面,则可以执行以下操作:

Goal::with('childrenRecursive')->get()