Laravel 检索板的所有 Parents
Laravel Retrieve All Parents For A Board
我有一个名为 "Announcements" 的板,它位于一个名为 "Important Information" 的板中,而该板位于 "Headquarters" 中。这是它的直观表示。
总部(没有parent的主板)[id = 1, parent_id = null]
↳ 重要信息("Headquarters" 的第一个 child 板)[id = 2, parent_id = 1]
↳ 公告("Important Information" 的第一 child 董事会)[id = 3, parent_id = 2]
我的 objective 是在 Laravel 模型中获得所有 "Announcements" parent 板。
我已经构造了一个函数来获得一个 parent 板。
public function parent()
{
return $this->where('id', $this->parent_id)->first();
}
如果您将此函数用于 "Announcements" 板,它将 return "Important Information" 板的结果,因为那是 parent "Announcements".
假设我要创建一个名为 listAllParents()
的函数
public function listAllParents()
{
// code here
}
此函数将 return 与指定板关联的所有 parent 的结果。因此,如果我要在 "Announcements" 上使用此功能,我希望所有与之关联的 parent 都被 returned.
这是一个小代码示例:
$board = Board::where('name', 'Announcements')->first();
$getAllParents = $board->listAllParents()->get();
return $getAllParents;
应该 returned 是 "Announcements" parent 板的列表,即:"Important Information" & "Headquarters"。 listAllParents() 函数中应包含哪些代码才能实现此目的?
如果您需要更好的解释,请告诉我。我将非常乐意提供帮助。
非常感谢您的帮助。
鉴于您当前的结构,您最好的选择是遍历层次结构中的每个 Board
,直到到达 Board
,其中 parent_id === null
。例如:
public function listAllParents()
{
$board = $this;
$parents = [];
while (! is_null($board->parent_id)) {
$board = $board->parent();
$parents[] = $board;
}
return $parents;
}
然而,这是非常低效的,因为您正在执行查询以查找层次结构的每个级别的节点。
另一种方法是使用嵌套树数据结构,Laravel 中有各种包可用于实现此功能。
我有一个名为 "Announcements" 的板,它位于一个名为 "Important Information" 的板中,而该板位于 "Headquarters" 中。这是它的直观表示。
总部(没有parent的主板)[id = 1, parent_id = null]
↳ 重要信息("Headquarters" 的第一个 child 板)[id = 2, parent_id = 1]
↳ 公告("Important Information" 的第一 child 董事会)[id = 3, parent_id = 2]
我的 objective 是在 Laravel 模型中获得所有 "Announcements" parent 板。
我已经构造了一个函数来获得一个 parent 板。
public function parent()
{
return $this->where('id', $this->parent_id)->first();
}
如果您将此函数用于 "Announcements" 板,它将 return "Important Information" 板的结果,因为那是 parent "Announcements".
假设我要创建一个名为 listAllParents()
的函数public function listAllParents()
{
// code here
}
此函数将 return 与指定板关联的所有 parent 的结果。因此,如果我要在 "Announcements" 上使用此功能,我希望所有与之关联的 parent 都被 returned.
这是一个小代码示例:
$board = Board::where('name', 'Announcements')->first();
$getAllParents = $board->listAllParents()->get();
return $getAllParents;
应该 returned 是 "Announcements" parent 板的列表,即:"Important Information" & "Headquarters"。 listAllParents() 函数中应包含哪些代码才能实现此目的?
如果您需要更好的解释,请告诉我。我将非常乐意提供帮助。
非常感谢您的帮助。
鉴于您当前的结构,您最好的选择是遍历层次结构中的每个 Board
,直到到达 Board
,其中 parent_id === null
。例如:
public function listAllParents()
{
$board = $this;
$parents = [];
while (! is_null($board->parent_id)) {
$board = $board->parent();
$parents[] = $board;
}
return $parents;
}
然而,这是非常低效的,因为您正在执行查询以查找层次结构的每个级别的节点。
另一种方法是使用嵌套树数据结构,Laravel 中有各种包可用于实现此功能。