У меня есть модель под названием Run, которая содержит этот метод:
public function getNameAttribute($name){ if($name == 'Eendaags') return $this->race_edition->race->name; return $this->race_edition->race->name.' '.$name; }
Мне нужна эта настройка для администратора laravel, так как много прогонов будет иметь одно и то же имя, и единственное отличие – название гонки. Но в одном месте на сайте мне нужно получить только имя, без мутирования. Это возможно?
это правильный путь
// that skips mutators $model->getOriginal('name');
https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_getOriginal
Редактировать: Осторожно!
Как объяснил Максим Чернян в комментариях, getOriginal()
не просто пропускает мутаторы, но также возвращает «исходное» значение поля во время чтения объекта из базы данных. Поэтому, если вы с тех пор изменили свойство модели, это не вернет ваше измененное значение, оно все равно вернет исходное значение. Более последовательный и надежный способ получить не-мутированное значение из класса модели состоит в том, чтобы извлечь его из свойства attributes
следующим образом:
$this->attributes['name']
Но имейте в виду, что attributes
являются защищенным свойством, поэтому вы не можете делать это за пределами класса модели. В этом случае вы можете использовать
$model->getAttributes()['name']`
или техника Максима из его комментария ниже.
У меня возникла проблема с аксессуарами Eloquent и привязкой модели модели – путем форматирования целого числа с помощью money_format значение больше не загружалось в поле ввода номера формы.
Обходной путь, который я использую, заключается в создании аксессора с другим именем:
public function getRevenueDollarsAttribute($value) { return money_format('$%i', $this->revenue); }
Это предоставляет мне аксессор, не затрагивая привязку модели модели.