Laravel: Задача имеет много подзадач, каждая подзадача может иметь много задач, и для этого нет ограничений - PullRequest
1 голос
/ 04 апреля 2020

Я работаю с laravel Я хочу составить список дел следующим образом

Каждая задача (T) может иметь много подзадач (t1, t2, t3 .... et c), каждая из этих подзадач (ti) может иметь другие подзадачи (t1 может иметь подзадачи, которые являются t1a, t1b, t1 c ... et c), также каждая из этих новых подзадач может иметь много подзадач (t1a может иметь подзадачи t1a1, t1a2, t1a3 ... et c) и нет ограничений по глубине дерева задач. это возможно? И как структурировать базу данных MySQL для этого, если это возможно?

1 Ответ

1 голос
/ 04 апреля 2020

Вы можете сделать это только с одной таблицей, например, так:

Класс 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

Хорошего дня:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...