2015-03-04 1 views
1

У вас есть $fillable и $guarded для защиты от массового задания. Но как я могу защитить определенные db-столбцы, чтобы их невозможно было обновить?Можно ли хранить столбцы для обновлений только в Laravel 4?

+0

Невозможно обновить их только с помощью массового присвоения или путем установки их непосредственно? ('$ model-> foo = 'bar'') – lukasgeiter

+0

Конечно, это было бы решение вручную установить, какие поля обновлять в контроллере. Было бы хорошо, если бы был способ для массового назначения. – MikaelL

+0

Нет. Я спрашиваю, должно ли быть установлено вручную. Другими словами, следует ли защищать только для массового присвоения или для всех возможных способов установки атрибута модели? – lukasgeiter

ответ

1

Вы можете переопределить isFillable() в своей модели и использовать свойство exists, чтобы определить, находится ли модель в базе данных или нет (если вы создаете или обновляете). Также вам понадобится другое свойство для настройки этих атрибутов. Давайте назовем это $guardedForUpdate:

protected $guarded = ['foo']; 
protected $guardedForUpdate = ['bar']; 

public function isGuardedForUpdate($key){ 
    return in_array($key, $this->guardedForUpdate) || $this->guardedForUpdate == array('*'); 
} 

public function isFillable($key){ 
    if($this->exists && $this->isGuardedForUpdate($key)){ 
     return false; 
    } 
    return parent::isFillable($key); 
} 

foo еще не будет масса назначается в любом случае. В то время как bar можно назначать массе при создании новой модели, но не при ее обновлении.

+0

Выглядит очень многообещающе. Я дам ему попробовать! – MikaelL

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