В какой части laravel приложения следует писать запросы?
На тостере уже задавали такой вопрос, но на него был только один ответ. Хотелось бы услышать больше мнений по этому вопросу. Речь идет, конечно, о "сложных" запросах.
Используйте сервисы. В сервисах вы будуте писать бизнес-логику. То есть там будут ваши и расчёты и запросы.
В контроллере мелкие запросы не более чем на 5-6 операторов (where, order, select etc). Иначе его уже в сервис надо выносить. В моделях запросы только на их состояние или перевод велечин. Например - Юзер имеет роль admin . И у него есть метод isAdmin() который проверяет имется эта роль у него или нет.
То есть если в архитектуру MVC добавить S(Service) - то тут немного понятнее станет.
Для понимания - сервис - это класс (Зачастую singelton) который отвечает за обработку определённых данных и получения результата вычисления дли использования в дальнейшем. Следует разделять сервисы по своим смысловым нагрузкам. SOLID принципы тоже почитатйте.
Я, так понимаю, в сервисе нужно писать что то вроде:
$this->app->bind('...', function () {
return Model::find(1); // Здесь запрос простой, но это так, для примера.
});
D3lphi: Не путайте service и serviceProvider.
ServiceProvider регистрирует ваш сервис в приложеии (В контейнере приложения) а сам сервис - это должен быть отдельный класс, который выполняет определённые действия. В контейнере его надо регистрировать всегда. Это удобно тем, что вы можете в любой момент подменить ему зависимомти не делая глобальных изменений в коде.
Запросы нужно писать в контроллере, если они примитивные. Тут и десяти мнений не нужно. Почитайте документацию и посмотрите для чего служит модель в Laravel.
Mysterion: простые на мой взгляд - это что то вроде Model::find(1) и другое в этом духе. Сложные - Model::where('a', '=', 'val')->orWhere(function ($query){
// ...
}->limit($a)->offset($b)->orderBy('a, 'DESC')->groupBy('b');