Подтвердить что ты не робот

Пропустить модельный аксессуар

У меня появилась модель Run, которая содержит этот метод:

public function getNameAttribute($name){
    if($name == 'Eendaags')
        return $this->race_edition->race->name;

    return $this->race_edition->race->name.' '.$name;
}

Мне нужна эта настройка для администратора laravel, так как много прогонов будет иметь одно и то же имя, и единственное различие - имя гонки. Но в одном месте на сайте мне нужно получить только имя, без мутирования. Возможно ли это?

4b9b3361

Ответ 1

это правильный способ

// 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']`

или метод Максима из его комментария ниже.

Ответ 2

У меня возникла проблема с аксессуарами Eloquent и привязкой модели модели - путем форматирования целого числа с помощью money_format значение больше не загружалось в поле ввода номера формы.

Обходной путь, который я использую, заключается в создании аксессора с другим именем:

public function getRevenueDollarsAttribute($value)
{
    return money_format('$%i', $this->revenue);
}

Это предоставляет мне аксессор, не затрагивая привязку модели модели.