所以我最初在mother_id
表上使用father_id
和persons
现在由于你只能通过一个查询递归加载所有母亲和父亲的问题,我想改变它,因为现在家庭树变得越来越慢了#34;
经过一些谷歌搜索后,我很快发现嵌套集(使用:" gazsp / baum")是推荐的处理方式。
据我所知,这将是正确的(?)设置:
___________________________________________________________________
| Root - Person that is no parent of anyone |
| ____________________________ ____________________________ |
| | First Child - Father | | Second Child - Mother | |
| | __________ _________ | | __________ _________ | |
| | | Father | | Mother | | | | Father | | Mother| | |
1 2 3_________4 5________6 7 8 9_________10 11_______12 13 14
| |___________________________| |___________________________| |
|___________________________________________________________________|
现在我无法将mother_id
和father_id
关系转换为新版本。我所做的是首先循环遍历所有人并默认为root。我似乎遇到了一些问题,我认为是由于字段为NULL。
现在我按照以下代码进行了操作,我希望将旧关系正确地转换为嵌套集。
$allPersons = \App\Person::all();
foreach($allPersons as $person)
{
if($person->father_id != 0)
{
$allPersons->find($person->father_id)->makeChildOf($person);
$person->father_id = 0;
}
if($person->mother_id != 0)
{
$allPersons->find($person->mother_id)->makeChildOf($person);
$person->mother_id = 0;
}
$person->save();
}
我多次遇到以下错误,而我发现结构没有任何问题。我无法找到任何可能导致此问题的循环或错误。
A node cannot be moved to a descendant of itself (inside moved tree).
我还尝试添加以下内容,然后让父亲/母亲成为一个孩子"(由于我使用它的上下文,命名确实让我很困惑)。这看起来似乎没有发现错误,同时查看我认为它应该出现的错误消息。
$mother = $allPersons->find($person->mother_id);
if($mother->isSelfOrDescendantOf($person)) dd('Already descendant');
$mother->makeChildOf($person);
我已经在这方面工作了很长一段时间,而且我不再有任何进展了。我使用嵌套集错了吗?是我的#34;翻译"脚本不正确或者您有更好的解决方案然后嵌套集请告诉我。