我正在开发一个简单的Family Tree Laravel应用程序。由于我总是检索父母进行测试的方式,我现在遇到了问题。这带来了多个查询,显然效率非常低。
我使用的是一个简单的表,其中包含列:id,mother_id,father_id
我的关系设置如下:
public function mother()
{
return $this->belongsTo('Person', mother_id');
}
public function father()
{
return $this->belongsTo('Person', 'father_id');
}
现在我想以递归方式获得父母和父母的父母等等。我找到了与父母一方做到这一点的方法,但之后只会加载所有母亲或所有父亲。我目前仍然坚持如何正确地做到这一点,而没有为每组父母提供新的查询。
更新 如果没有找到合适的解决方案,我可能会使用数据透视表。我想保留所有当前条目。然后我以递归方式获取所有数据透视表项。以下方法是否适合处理它?然后我会继续根据性别属性确定母亲和父亲。
public function parents()
{
return $this->hasMany(Person::class);
}
public function allParents()
{
return $this->parents()->with('allParents');
}
//Person::find($id)->with('allParents');