2014-02-01 3 views
0

Возможно ли создать AR-модель в yii таким образом, чтобы отключить функцию save()? Я использую модели для отображения данных, которые вводятся в БД из другого источника, и никогда не потребуется его обновлять.Постоянно отключить сохранение модели в Yii

UPDATE: Итак, какие методы я переопределяю, какие методы в базовом классе фактически пишут что-то в БД?

+0

Почему вы не можете просто использовать метод 'save()' для этих моделей? –

+1

Чего вы хотите достичь? Переопределить save() и просто вернуть true; Это было бы прекрасно? – Pentium10

+0

Я действительно никогда не использую 'save()', но тогда я действительно не знаю, действительно ли 'save()' является единственным местом, где что-то записывается в БД. Будет ли переопределять 'save()' в моих моделях, чтобы убедиться, что ничто никогда не написано DB? – Beowulfenator

ответ

3

Просто переопределите save и попросите его сделать соответствующее исключение. Например:

public function save(bool $runValidation=true, array $attributes=NULL) 
{ 
    throw new \LogicException("This kind of model does not support saving."); 
} 

Таким образом, всем, кто ошибочно называет метод, ясно, что происходит.

Не забывайте также переопределить saveAttributes, так как эти два метода, к сожалению, полностью независимы.

+0

, а также есть update() и все подобное. – Pentium10

+0

И это как раз проблема. Какие методы следует переопределить? – Beowulfenator

+0

@Beowulfenator: невозможно запретить * все * возможности записи, выдаваемой через саму модель (Yii не помогает). Вам нужно будет заменить [commandBuilder] (http://www.yiiframework.com/doc/api/1.1/CActiveRecord#commandBuilder-detail) своей собственной версией, которая отказывается строить команды записи, и даже тогда кто-то может получить прямой доступ «dbConnection» и проделайте это. Хороший дизайн диктует, что запрет на запись будет применяться на уровне базы данных; сама модель должна просто напомнить вам, если вы забудете. – Jon

Смежные вопросы