Есть ли какой-либо возможный способ ленивой загрузки пользовательского атрибута на модели Laravel без, загружая его каждый раз, используя свойство appends
? Я ищу что-то похожее, чтобы вы могли lazy load Eloquent relationships.Как ленить загрузить пользовательский атрибут на модели Laravel?
Например, учитывая этот метод сбруя на модели:
public function getFooAttribute(){
return 'bar';
}
Я хотел бы быть в состоянии сделать что-то вроде этого:
$model = MyModel::all();
$model->loadAttribute('foo');
Этот вопрос является не то же самое как Add a custom attribute to a Laravel/Eloquent model on load?, потому что он хочет загрузить пользовательский атрибут при каждой загрузке модели. Я ищу ленивую нагрузку атрибут только при указании.
Я полагаю, я мог бы присвоить свойство модели экземпляра с тем же именем, что и пользовательским атрибут, но это имеет производительность недостаток вызова метода аксессора дважды, может иметь непреднамеренные побочные эффекты, если это сбруя влияет свойство класса , и просто чувствует себя грязным.
$model = MyModel::all();
$model->foo = $model->foo;
У кого-нибудь есть лучший способ справиться с этим?
Эй, спасибо, это именно то, что я искал! Я рад, что у Laravel есть собственный способ справиться с этим. Я думаю, что они только упоминают «присоединяется» к документам (а не к единственному «append»), поэтому я никогда не слышал об этом. –
Существует много классных методов, о которых я не знал. Погружение в код модели очень поучительно, и я настоятельно рекомендую вам найти отличные инструменты :) – Hammerbot
Это не работает, как описано. Метод 'append()' принадлежит классу 'Model', но когда вы вызываете' MyModel :: all() 'вы возвращаете объект' Collection', который не содержит метод 'append()'. Вам нужно написать: '$ model-> each (function ($ instance) {$ instance-> append ('foo');});' – Soulriser