我有一个很大的应用程序要构建,管理员可以创建一个部门并为其分配一个主管。现在,一个部门可以是另一个部门的孩子,但也可以是其他部门的父母。因此,父母部门可以拥有3个直接子部门,这3个部门中的每个部门都可以拥有5个自己的子部门(无限多个)。
现在,父母部门的主管必须能够管理他所有直接部门和所有部门的直接或间接子女。
对于如何从给定主管的数据库中检索所有这些内容,我感到困惑“位”。我只需要了解如何实现这一目标。如何检索他的所有部门以及与他们直接或间接相关的所有子部门?
我在这个项目中使用Laravel 5,只是一个信息。为部门及其主管制定了一个department_department透视表,用于关系,以及department_supervisor透视。
递归函数是否可以解决这个问题?怎么做,因为我正在尝试这个,它没有按预期工作。
public function index() {
// get his direct departments of which he is a supervisor
$supervisingDepartments = $this->employeeRepo->getAllSupervisingDepartments(Auth::user()->id);
// get all the children departments of each of his direct departments
$childDepartments = $this->getAllChildDepartmentsFor($supervisingDepartments);
dd($childDepartments); // gives me only one item in the array, the LAST child department
return view("super.employees.index");
}
public function getAllChildDepartmentsFor($supervisingDepartments) {
$childDepartments = [];
foreach($supervisingDepartments as $supervisingDepartment) {
if( ! $supervisingDepartment->childDepartments()->count()) {
$childDepartments[$supervisingDepartment->name] = $supervisingDepartment;
} else {
$this->getAllChildDepartmentsFor($supervisingDepartment->childDepartments);
}
}
return $childDepartments;
}