簡體   English   中英

雄辯地覆蓋mutator的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM