Нужно вызвать функцию другого контроллера из текущего? Это правильный подход?

У меня есть свежая установка laravel 5.7 для моего академического проекта. Я хочу сделать проект напоминания о лекарствах, используя laravel. Для этого у меня есть 2 таблицы:

  1. Пользователь
  2. Медицина

У меня есть модели и контроллеры для пользователей и медицины.

  • Контроллеры

    1. МедицинаКонтроллер
    2. UserController
    3. Медусерконтроллер
  • Модели

    1. Пользователь
    2. Медицина
    3. Мед_Пользователь

В модели пользователь и медицина имеют отношение «многие ко многим». И для поддержки Many-to-Many у меня есть таблица ссылок User_Medicine, содержащая внешний ключ обеих родительских таблиц.

Теперь в контроллере пользователь добавляет сведения о лекарстве, и приложение должно проверить, находится ли лекарство уже в базе данных. Если лекарство уже существует, приложение должно присвоить его med_id с user_id в таблице ссылок. Но если лекарство не существует в приложении БД, следует добавить новую информацию о лекарстве. Этот процесс написан в MedUserController.

Теперь проблема в том, что у меня есть функция добавления лекарств в MedicineController@store. И я хочу повторно использовать эту функцию из текущего контроллера ( MedUserController ).

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

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

kmg kumar 28.05.2019 09:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Контроллер предназначен для обработки входных данных и предоставления объекта ответа. При этом вызов контроллера с другого контроллера является плохой практикой.

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

Это заглушка того, что я бы сделал

public function controllerAction() {
    $user = Auth::user();
    $medicineData = request()->all();
    $medicine = $this->medicineRepository->store($medicineData);
    $user->medicines()->attach($medicine);
}

В методе store репозитория вы можете проверить, существует ли уже лекарство или оно новое, и вы всегда возвращаете объект Medicine.

Спасибо за помощь. Это то, о чем я просил. Большое спасибо :)

Furba Tenzing Sherpa 28.05.2019 10:19

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