Как я могу использовать аксессор для создания текстового поля из двоичного поля?

0

В Laravel 5 у меня есть двоичное поле, называемое "микрочип", которое является двоичным полем. Я хотел бы создать функцию доступа, которая выводит "да" или "нет", если исходное поле содержит 1 или 0 соответственно. У меня есть это:

    public function getMicrochipTextAttribute($input)
    {
    switch($input)
    {
        case 0:
            return "No";
        break;
        case 1:
            return "Yes";
        break;
    }
}

К сожалению, когда я использую $model-> microchip_text, он возвращает "Нет", независимо от содержимого ввода $. Независимо от того, содержит ли $ input 1 или 0, он выводит "Нет",

Теги:
accessor

1 ответ

2
Лучший ответ

Причина этого в том, что Eloquent не знает, какой $input вы используете, потому что вы создаете аксессуар для нового свойства, а не для существующего. Вместо этого попробуйте следующее:

public function getMicrochipTextAttribute()
{
    switch($this->attributes['microchip'])
    {
        case 0:
            return "No";
        break;
        case 1:
            return "Yes";
        break;
    }
}

или более короткая версия:

public function getMicrochipTextAttribute()
{
    return $this->attributes['microchip'] ? 'Yes' : 'No';
}
  • 0
    Спасибо! Это добилось цели. Итак, я был бы прав, предполагая, что использование $ input в качестве параметра является практикой, зарезервированной для мутаторов, а не аксессоров?
  • 0
    @KinsDotNet $input работает для аксессоров, но только когда вы создаете аксессор для существующего свойства. Например: getMicrochipAttribute ( microchip существует? да, поэтому введите его значение). getFooBarAttribute ( foo_bar существует? нет, поэтому не вводить ничего).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню