Php 是否可以仅在Laravel 4中保护更新列?

Php 是否可以仅在Laravel 4中保护更新列?,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,您有$filleble和$guarded来防止质量分配。但是如何保护某些db列,使其无法更新?您可以覆盖模型中的isFillable(),并使用exists属性来确定模型是否已经在数据库中(如果您正在创建或更新)。此外,您还需要另一个属性来配置这些属性。我们称之为$guardeforupdate: protected $guarded = ['foo']; protected $guardedForUpdate = ['bar']; public function isGuardedForUp

您有
$filleble
$guarded
来防止质量分配。但是如何保护某些db列,使其无法更新?

您可以覆盖模型中的
isFillable()
,并使用
exists
属性来确定模型是否已经在数据库中(如果您正在创建或更新)。此外,您还需要另一个属性来配置这些属性。我们称之为
$guardeforupdate

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
在创建新模型时可分配质量,但在更新模型时不可分配质量。

仅通过质量分配或直接设置无法更新质量?(
$model->foo='bar'
)当然,手动设置控制器中要更新的字段是一种解决方案。如果有一种大规模分配的方式,那就太好了。不,我是问是否可以手动设置它们。换句话说,保护应该只针对批量分配还是针对设置模型属性的所有可能方法?我认为批量分配看起来非常有前景。我要试试看!