2017-01-02 70 views
2

我有一个包含压缩数据的DB上的BLOB字段。Laravel - 模型类,覆盖主要方法

我需要压缩/解压缩是透明的,用户类不需要写:

$objModel->field = gzencode($objModel->field); 
$objModel->field = gzdecode($objModel->field); 

为了节省我得到它,覆盖保存方法:

public function save($attributes[] = null) { 
    $this->field = gzencode($objModel->field); 
    return parent::save($attributes);  
} 

但是,当我恢复来自数据库的数据我没有得到gzdecode“透明”,我已经尝试覆盖引导,__call,__callstatic和其他人,但unuccesfuly。

有人能告诉我哪种方法从数据库中恢复数据并填充模型对象,所以我可以覆盖它,并使gzdecode?

非常感谢。

回答

5

我不会推荐你重写雄辩方法。只需使用accessor

public function getFieldAttribute($value) 
{ 
    return gzdecode($value); 
} 

而且mutator

public function setFieldAttribute($value) 
{ 
    $this->attributes['field'] = gzencode($value); 
} 
+1

非常感谢@阿列克谢 - mezenin!我看到这些,但我读得太快,没有注意到“会自动调用”。你的回答真的帮了我。问候! –