![](/img/trans.png)
[英]Laravel 5.4: Eloquent sync() not using model's mutator or attribute casting?
[英]Override mutator's value in eloquent
給定以下代碼:
class Picture {
public function getAbsolutePathAttribute() {
return "absolute_path"
}
}
$picture = new Picture();
echo $picture->absolute_path; // prints "absolute_path"
$picture->absolute_path = "I will override you no matter what";
echo $picture->absolute_path; // prints "absolute_path"
有沒有辦法重寫雄辯的mutator屬性?
我嘗試了一種魔術方法:
setAbsolutePathAttribute($value) {
$this["attributes"] = $value;
}
但是它沒有用。
因此,我不建議嘗試通過覆蓋mutator解決此問題。 您也許可以,但是接觸Laravel的核心越少越好。 為什么? 因為您永遠不知道將來的Laravel代碼會是什么樣。
下次進行次要或主要的Laravel版本升級時,核心更改可能會破壞您的內部替代。
因此,給出您的簡單示例,有2種方法可以解決此問題:
1.在數據庫級別創建一個默認值
Laravel遷移具有默認的列修飾符,它看起來像這樣: ->default('something')
這樣,您根本不需要變種器即可獲得想要的默認值。
您可以在這里閱讀有關它們的更多信息: https : //laravel.com/docs/5.6/migrations#column-modifiers
2.使您的訪問器更智能
您的示例非常簡單,因此我將使用它:
class Picture {
public function getAbsolutePathAttribute() {
if(is_null($this->absolute_path)) {
return "absolute_path";
}
return $this->absolute_path;
}
}
這樣,它只會在沒有價值的情況下執行某些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.