我正在尝试找到一种方法来\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
来归还其子孙及其子女等?
答案 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()