Yii ActiveRecord определенно упрощает программирование для базы данных, как, конечно, любая приличная реализация ActiveRecord.
Отображение в БД
Что касается отображения между базой данных и вашими моделями, то нет проблем с тем, что ваш код «захватит» вашу базу данных. Единственное, что вы заставляете постоянно поддерживать в актуальном состоянии, это:
/**
* @return string the associated database table name
*/
public function tableName()
{
return 'my_table';
}
Видеть, как имена таблиц не будут меняться так часто, это не практическая проблема.
Существуют другие части ваших моделей ActiveRecord, которые должны синхронизироваться с вашей схемой:
- Комментарии phpdoc, описывающие свойства класса модели
- Другие общедоступные функции, которые реализуют различные функциональные возможности, такие как правила проверки [
public function rules()
], внешние связи модели [public function relations()
], метки атрибута [public function attributeLabels()
] и т. Д.
Однако вы все равно можете использовать модели и саму базу данных, даже если они не отражают вашу текущую схему базы данных - просто соответствующие функциональные элементы больше не будут работать.
Эти фрагменты данных не не обеспечивают ограничения вашей базы данных, они просто помогают вам, позволяя вам получить доступ к функциональности более интуитивным способом. Фактические ограничения все еще реализуются на базы данных.
Производительность
Yii реализует построитель запросов , который вы можете использовать для генерации SQL из беглых выражений (ваши модели используют тот же механизм при запросе напрямую). Построитель генерирует SQL из беглых выражений, и результат не будет медленнее, чем если бы вы выполнили эквивалентный SQL напрямую.
Конечно, будут некоторые издержки от использования самого компоновщика запросов, но это компромисс, который выбрали почти все современные языки программирования (LINQ был бы самым массовым примером здесь), потому что оно того стоит. * * 1039
В любом случае вы можете написать SQL-запрос самостоятельно, используя CDbCommand
. Я не вижу причин для этого, но вариант всегда есть, если вам это нужно. Поэтому нет никаких шансов, что вы останетесь без работы из-за недостатков ActiveRecord, независимо от того, что вам нужно сделать.