簡體   English   中英

如何在 Laravel 模型上延遲加載自定義屬性?

[英]How to lazy load a custom attribute on a Laravel model?

是否有任何可能的方式來延遲加載在Laravel模型的自定義屬性,而不使用每次加載它appends屬性? 我正在尋找類似於您可以延遲加載 Eloquent 關系的方式

例如,給定模型上的這個訪問器方法:

public function getFooAttribute(){
    return 'bar';
}

我希望能夠做這樣的事情:

$model = MyModel::all();
$model->loadAttribute('foo');

這個問題是一樣的東西作為一個自定義屬性添加到負載的Laravel /雄辯的模式? 因為它想在每個模型加載時加載一個自定義屬性 - 我希望僅在指定時延遲加載該屬性。

我想我可以為模型實例分配一個與自定義屬性同名的屬性,但這有兩次調用訪問器方法的性能下降,如果該訪問器影響類屬性,可能會產生意想不到的副作用,只是感覺很臟。

$model = MyModel::all();
$model->foo = $model->foo;

有沒有人有更好的方法來處理這個問題?

這是為了序列化嗎? 您可以在 Model 實例上使用append()方法:

$model = MyModel::all();
$model->append('foo');

append方法也可以將數組作為參數。

像這樣的東西應該工作......

public function loadAttribute($name) {
    $method = sprintf('get%sAttribute', ucwords($name));
    $this->attributes[$name] = $this->$method();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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