首页 > 解决方案 > laravel与有向无环图的递归关系

问题描述

我有表“任务”并且与自身有多对多的关系

    public function depends_on() //parents
    {
        return $this->hasMany(DependentTask::class, 'task_id');
    }

    public function dependents() //kids
    {
        return $this->hasMany(DependentTask::class, 'dependent_id');
    }

关系可能是这样的

关系可能是这样的

我想选择这样的任务

第一次打印 5 或 2

然后是 3 和 6

然后是 4 和 1

我怎么能通过laravel做到这一点?

标签: phplaravelalgorithmrecursive-datastructures

解决方案


这是您可以使用递归关系的方式:

public function dependsOn()
{
    return $this->hasMany('Account', 'task_id','dependent_id');
}

public function dependents()
{
   return  $this->dependsOn()->with('dependents');

}

然后:

$dependents = Dependents::with('dependents')->first();

$dependents->dependents; 

$dependents->dependents->first()->dependents; // .. and so on

推荐阅读