Как связать 2 отдельные модели в Laravel?

Я делаю инструмент управления проектами, чтобы изучить Laravel.

Прямо сейчас у меня есть 2 модели для проекта и задачи, и я установил связь между ними:

Проект:

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

Задача:

public function project()
{
    return $this->belongsTo(Project::class);
}

Они работают нормально, я вижу правильные результаты в php artisan tinker, но сейчас я жестко кодирую, к какому проекту принадлежат все задачи.

На данный момент я создал, работаю, формы, которые создают обе эти вещи независимо, но теперь я знаю, как связать их вместе, как это сделал бы профессиональный разработчик.

Единственное решение, которое я могу придумать, - это иметь раскрывающийся список в представлении createTask, заполненный всеми проектами, которые в настоящее время работают. Это не кажется очень элегантным и не похоже, как с этим справился бы настоящий разработчик. Мне кажется, что создание задачи в этом смысле должно быть правильно увязано с проектом?

Как бы вы ни пытались это сделать, задача должна будет знать, на какой проект она назначена. Если вы уже знаете, что эта информация входит в представление createTask, вам не понадобится раскрывающийся список, вы просто публикуете информацию о проекте вместе с информацией о задаче. Вы можете использовать скрытую форму, отправить uuid проекта в маршрут и т. д. Если вы не знаете, к какому проекту принадлежит задача, то как изменится ваш код, если вы не разрешите вводить его в форму?

N Mahurin 01.05.2018 17:45

@NMahurin да, это моя проблема, у меня нет опыта, чтобы знать разумный способ структурировать мой проект. Я думаю, возможно, ссылка в представлении Project, которая направляет на такой маршрут, как Route::get('/task/create/{projectid}', 'TaskController@create') или что-то в этом роде, поэтому у меня всегда есть идентификатор проекта, связанный с созданием задачи.

Matadeleo 01.05.2018 17:57

Это был бы хороший способ сделать это. У вас будет доступ к проекту в вашем контроллере, который вы можете передать в форму. Если вы еще этого не сделали, найдите скрытые входы. Иногда они могут быть быстрым способом опубликовать дополнительные данные. Я больше ими не пользуюсь (так как вы научитесь лучше разбираться в структуре / маршрутизации с большим опытом), но они могут стать началом.

N Mahurin 01.05.2018 18:08

Пользовательские интерфейсы сложны. Нет серебряной пули в том, как правильно обращаться с этими вещами. Крупные компании собирают тонны данных, прежде чем они действительно решат, какой пользовательский интерфейс наиболее удобен для их пользовательской базы ... и даже тогда они все равно часто ошибаются. Эмпирическое правило - «как бы Google это сделал». Обычно это хорошее начало

apokryfos 01.05.2018 18:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
49
1

Ответы 1

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

Описанный вами подход - это один из способов достижения этой цели, и он подходит для представления «все проекты», когда приложение не знает, на какой проект пользователь собирается назначить задачу.

Другой вариант - создать представление «редактировать проект», в котором отображается информация только для одного проекта. На этот раз, поскольку вы знаете идентификатор проекта, в который будет добавлена ​​задача, вместо отображения раскрывающегося списка вы можете использовать скрытый элемент формы для передачи идентификатора.

В зависимости от интерфейса могут быть подходящими оба метода.

Другие вопросы по теме