Я пытаюсь создать приложение todo с Laravel, пример выглядит ниже
Если бы у меня были только списки основного уровня, я быбез проблем. Кроме того, если бы задачи были до или после повторного создания подсписков, у меня не возникло бы никаких проблем.
Особенно порядок - Задача 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 задач: (