Создание подсписков с моделями Laravel - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь создать приложение todo с Laravel, пример выглядит ниже

enter image description here

Если бы у меня были только списки основного уровня, я быбез проблем. Кроме того, если бы задачи были до или после повторного создания подсписков, у меня не возникло бы никаких проблем.

Особенно порядок - Задача 1, затем два Подсписка, а затем бит Задача22 - это то место, где я не могу придумать способ генерации.

В настоящее время у меня есть модель List и уровень Task. Список hasMany Task и Task belongsTo a List. Я пытался добавить отношение List hasMany List, но не могу придумать, как использовать загрузку упорядоченных элементов списка и их задачи, как показано на рисунке выше.

Возможно, я напишунеобработанные запросы, но я хотел бы получить представление от любого, у кого есть лучший опыт и понимание отношений и моделей Laravel.

Большое спасибо за любой совет, которым вы делитесь, и надеюсь, что этот вопрос поможет кому-то, кто не может создать отношениякак этот.

Это моя модель TodoList

class TodoList extends Model
{

    //To be able to get the main TodoList items I used the following method 
    // but this broke the all() method so removed it.
    public function newQuery()
    {
        return parent::newQuery()->where(
            [
                'parent_list_id' => null,
            ]
        );
    }

    public function tasks(){
        return $this->hasMany(Task::class);
    }

    public function lists(){
        return $this->hasMany(TodoList::class, 'parent_list_id','id');
    }
}

Элементы списка живут в таблице, называемой списками, которая имеет следующую структуру:

id
list_name
user_id
order_id
parent_list_id
created_at
updated_at

Таблица задачвыглядит следующим образом

id
task_name
list_id
user_id
order_id
created_at
updated_at

Это модель задачи;

class Task extends Model
{

    public function stage(){
        return $this->belongsTo(TodoList::class);
    }
}

Попробуйте получить с этим отношением, но оно не сработало.

TodoList::with('lists.taks')->get();

Поэтому я попытался TodoList::with(['tasks','lists.taks'])->get();

Выглядело лучше, но все равно я не получил желаемый заказ. Потому что order_id в списках отличается от order_id задач: (

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