использование $ this-> db-> query один в проекте не является хорошей практикой в ​​codeigniter - PullRequest
1 голос
/ 28 ноября 2011

Я сделал много проектов CodeIgniter, и в этом я использовал только $ this-> db-> query, а не любые другие методы.

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

Поэтому люди используют db-> get, db-> where и подобные функции, включая join.

Например, теперь я использую mysql с $ this-> db-> query для всего моего проекта, и если я изменяю свою базу данных на другие ... это будет проблемой ...

Кроме того, мы должны очень четко выбрать базу данных до начала проекта, и это будет хорошей практикой, и люди об этом знают ... кроме ... этой ...

в чем будет несоответствие, если мы будем использовать только запрос $ this-> db-> в проекте CodeIgniter?

Любой тип ответа будет полезен ... советы, предложения и ответы. :)

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

В некоторых отношениях я вижу выгоду от использования классов Active Record, но в других случаях это может быть недостатком.Позвольте мне уточнить.

Как сказал Бирдерик, преимущество использования класса Active Record состоит в том, что CodeIgniter в основном записывает для вас операторы t-SQL в ядре базы данных, которое вы указали в файле config.php.Возьмем, к примеру, следующий код:

$this->db->select('*')->from('users')->where('name', 'bob');
$query = $this->db->get(0,10);

Сгенерирует это в MySQL: SELECT * FROM Users WHERE Name = 'bob' LIMIT 0, 10.

И это в PostgreSQL: SELECT * FROM Users WHERE Name = 'bob' LIMIT 0 OFFSET 10

Небольшие различия во tSQL заботится класс Active Record и его конструктор запросов.Это огромное преимущество, когда вы переносите базу данных или тестируете код модели на новом источнике данных (например, для модульного тестирования с базой данных SQLite).

Однако, с другой стороны,Монета Я думаю, что , как правило, базы данных, как правило, сложнее изменить и имеют гораздо больше "ловушек" при миграции.Если вы напишите весь свой код как код Active Record, то он фактически навсегда привязан к CodeIgniter.Затем довольно трудно перенести этот код и эти запросы в новую инфраструктуру MVC или даже на новый язык.

Использование класса Active Record дает вам свободу базы данных, но связывает вас с CodeIgniter.Использование обычных SQL-запросов дает вам свободу среды, но привязывает вас к вашей базе данных.Иногда мои запросы довольно сложны и имеют подзапросы, всевозможные объединения, странный специфический синтаксис SQL Server ... поэтому я должен использовать $ this-> db-> query ().Однако для всего простого я использую Active Record.

2 голосов
/ 28 ноября 2011

Из руководства пользователя :

Помимо простоты, основным преимуществом использования функций Active Record является то, что он позволяет создавать приложения, независимые от базы данных, поскольку синтаксис запросагенерируется каждым адаптером базы данных.Это также позволяет выполнять более безопасные запросы, поскольку значения автоматически экранируются системой.

Класс активных записей генерирует соответствующий SQL на основе выбранного вами драйвера.Если в будущем вы решите изменить базы данных, все, что вам нужно сделать, это сделать небольшое изменение конфигурации вашего приложения, чтобы оно работало с новой базой данных.

Используя $this->db->query(), вы открываете возможность использования специфических функций MySQL, которые не поддерживаются другими системами баз данных.Если бы вы переключились на другую базу данных, некоторые ваши запросы могли бы больше не работать.

Я не могу говорить конкретно о том, что поддерживается MySQL и не поддерживается другими системами баз данных, но это не должно быть слишком сложночтобы найти ли через переполнение стека или Google.

...