2017-01-02 95 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!我看到這些,但我讀得太快,沒有注意到「會自動調用」。你的回答真的幫了我。問候! –