Итак, у меня есть API, который я создаю, и у него есть модель «Member». Я строю этот API на основе уже существующей базы данных, и этот «член» имеет только около 16 отношений в своем основном запросе. Теперь я должен построить свой API, чтобы ответить на что-то вроде member/{id}/pension
и вернуть всю свою информацию о пенсии. Это совершенно новый набор ассоциаций вместе с некоторыми из тех ассоциаций, которые я уже создал. Мои вопросы: плохая практика — начинать создавать дополнительные методы Controller в MembersController, например showPension / showPensionSummary, или мне следует перенести их на другой контроллер …. или есть опция c, которую я пропускаю.
Да, это плохая практика — класть все это в один контроллер. Тогда вы не применяете протокол единой ответственности (SRP). Но если я не ошибаюсь, у вас есть Member
модель. Член имеет отношения с пенсией, поэтому у вас есть Pension
модель?
В Member
Модель вы можете добавить метод, как:
public function pension() {
return $this->hasOne('App\Model\Pension');
}
Если у вас есть больше маршрутов с {id} от участника, вы можете использовать привязку модели маршрута. Измените параметр id на {member}. Затем внутри AppServiceProvider добавьте следующий код:
$router->bind('member', 'App\Models\Member');
Создайте папку внутри вашей папки контроллера с именем Member. Там добавьте MemberController и PensionController. Внутри PensionController добавить метод: showPension или просто показать (потому что вы уже в контроллере). Так чище.
public function show(\Illuminate\Http\Request $request) {
echo json_encode($request->member->pension);
}
Других решений пока нет …