Может ли контроллер иметь запросы к базе данных (MySQL)? Если да, то когда? - PullRequest
4 голосов
/ 02 сентября 2011

Я читаю множество уроков по MVC, поэтому мой вопрос, может ли идеальный каркас PHP MVC иметь запросы к базе данных в Controller? Как я понимаю, наиболее удобный способ - поместить все запросы к базе данных в модель, верно? И если у меня есть POST или что-то, я просто передаю этот POST в Model, и он делает все вставки и т. Д.?

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

Ответы [ 4 ]

8 голосов
/ 02 сентября 2011

Ни один контроллер не может иметь никакого связанного с БД кода - любые запросы к БД могут храниться в модели в архитектуре MVC - контроллер работает только с моделями, но не напрямую с БД

РЕДАКТИРОВАТЬ: большинство фреймворков позволяют вызывать SQL напрямую из контроллера - но тогда это не MVC, а куча объектов

6 голосов
/ 02 сентября 2011

No Controller не должен ИДЕАЛЬНО и КОНЦЕПТУАЛЬНО содержать какие-либо запросы к базе данных. Если у вас есть какие-то запросы в самом контроллере, тогда он лишит некоторые ключевые преимущества архитектуры MVC, такие как разделение кода и так далее.

В идеале ваш, Классы моделей (M) должны содержать запросы к БД и любые взаимодействия с БД через объекты БД. Модель в идеале представляет собой таблицу в БД или файл, используемый для io

Представления (V) должны содержать HTML с очень небольшим количеством PHP. В большинстве условий используются только циклы и условные операторы

Классы контроллеров (C) должны содержать всю бизнес-логику вашего приложения, обработчиков ошибок и т. Д.

Очень полезно поддерживать архитектуру MVC с точки зрения поддержки, отладки, а также понимания кода с точки зрения новых перспективных разработчиков. Нормы приносят много преимуществ, как указано выше.

2 голосов
/ 02 сентября 2011

Технически - да, это возможно. Но это сломало бы всю идею MVC.

0 голосов
/ 04 сентября 2011

В моем программном обеспечении я делаю возможным извлечение объектов запроса из модели и выполнение их из внутренних контроллеров:

$model->dsql()->where('age>',20)->do_delete();

Технически - да, контроллер может выполнять запросы, но для построения этого запроса он должен полагаться на модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...