Я пытаюсь найти место, чтобы добавить какое-то глобальное поведение при возврате полей, а не определять аксессоры для всех полей во всех моделях.Как правильно использовать «базовую модель» с Laravel для расширения getAttribute()?
Это привело меня к созданию класса BaseModel
, который распространяется на getAttribute()
. Я был под впечатлением, что это нужно вызывать для каждого поля при запросе модели. Однако кажется, что он вызывается только при запросе определенного поля.
Может кто-нибудь помочь мне разобраться в getAttribute()
и почему его не вызывают в первом примере ниже? Возможно, есть лучшее место для определения какого-то «глобального аксессуарного» поведения, которое я не знаю. Благодаря!
Пример модели:
class Thingy extends BaseModel {
}
BaseModel:
class BaseModel extends Eloquent {
public function getAttribute($key) {
Log::alert($key);
parent::getAttribute($key);
}
}
Результаты:
return Thingy::find(1); // Returns all fields, but does not hit getAttribute()
return Thingy::find(1)->title // Returns and logs only title
Если вам нужна дополнительная помощь, скажите мне, что вы хотите достичь, и я буду править мой ответ;) – lukasgeiter
Спасибо за разъяснение. Я по существу пытаюсь добавить какое-то глобальное поведение, чтобы делать такие вещи, как: - Преобразование любых полей, которые являются Tinyint 0 или 1, истинными/ложными при возврате в пользовательский интерфейс или преобразование любых значений NULL в пустую строку – Runcible
Хорошо. Обновлен ответ ... – lukasgeiter