Вы можете сделать это только с одной таблицей, например, так:
Класс CreateTasksTable в папке / database / migrations:
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->integer('parent_id')->nullable();
$table->timestamps();
});
В файле модели App \ Task вы должны создать необходимые отношения:
public function parent()
{
return $this->belongsTo(self::class, 'parent_id');
}
public function children()
{
return $this->hasMany(self::class, 'parent_id');
}
И затем, когда вы хотите создать задачу, она может быть родителем любого числа задач. И эти дочерние задачи также имеют свои собственные дочерние задачи.
$parent = App\Task::create(['name' => 'parentTask']);
$child = App\Task::create(['name' => 'childTask', 'parent_id' => $parent->id]);
$childOfChild = App\Task::create(['name' => '2xChild', 'parent_id' => $child->id]);
Вы можете позвонить родителям и детям, набрав их имена отношений:
dd($parent->children); // get all children
dd($child->parent); // get the parent
Хорошего дня:)