У меня есть свежая установка laravel 5.7 для моего академического проекта. Я хочу сделать проект напоминания о лекарствах, используя laravel. Для этого у меня есть 2 таблицы:
У меня есть модели и контроллеры для пользователей и медицины.
Контроллеры
Модели
В модели пользователь и медицина имеют отношение «многие ко многим». И для поддержки Many-to-Many у меня есть таблица ссылок User_Medicine, содержащая внешний ключ обеих родительских таблиц.
Теперь в контроллере пользователь добавляет сведения о лекарстве, и приложение должно проверить, находится ли лекарство уже в базе данных. Если лекарство уже существует, приложение должно присвоить его med_id с user_id в таблице ссылок. Но если лекарство не существует в приложении БД, следует добавить новую информацию о лекарстве. Этот процесс написан в MedUserController.
Теперь проблема в том, что у меня есть функция добавления лекарств в MedicineController@store. И я хочу повторно использовать эту функцию из текущего контроллера ( MedUserController ).
Что было бы лучшим способом сделать это. Пожалуйста, предложите.
Контроллер предназначен для обработки входных данных и предоставления объекта ответа. При этом вызов контроллера с другого контроллера является плохой практикой.
В вашем случае вы должны обрабатывать это с помощью Шаблон репозитория, что означает, что у вас есть класс, отвечающий за создание/извлечение объектов из базы данных, и вы можете вызывать его из любого контроллера/класса.
Это заглушка того, что я бы сделал
public function controllerAction() {
$user = Auth::user();
$medicineData = request()->all();
$medicine = $this->medicineRepository->store($medicineData);
$user->medicines()->attach($medicine);
}
В методе store
репозитория вы можете проверить, существует ли уже лекарство или оно новое, и вы всегда возвращаете объект Medicine
.
Спасибо за помощь. Это то, о чем я просил. Большое спасибо :)
вы можете использовать красноречивую модель, чтобы вставить лекарство в MedUserController.