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

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

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

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


person KinsDotNet    schedule 29.04.2015    source источник


Ответы (1)


Причина этого в том, что 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';
}
person Ravan Scafi    schedule 29.04.2015
comment
Благодарю вас! Это помогло. Итак, был бы я прав, если бы предположил, что использование $input в качестве параметра — это практика, зарезервированная для мутаторов, а не для доступа? - person KinsDotNet; 29.04.2015
comment
@KinsDotNet $input работает для средств доступа, но только тогда, когда вы создаете средство доступа для существующего свойства. например: getMicrochipAttribute (microchip существует? да, поэтому введите его значение). getFooBarAttribute (foo_bar существует? нет, так что ничего не вводить). - person Ravan Scafi; 29.04.2015