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

В 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