Как я могу вывести соответствующее состояние? - PullRequest
0 голосов
/ 04 мая 2018

В модели есть «статус»,

«Статус» имеет следующее состояние: [«в ожидании», «успех», «закрыто»],

Но в базе данных есть цифровые.

Как мне сделать в модели номер, соответствующий состоянию?

Так же, как: «0» - это успех, «1» - «закрыто» ....

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я использую переменную const.

Например:

const STATUS_PERFECT = -1;
const STATUS_WAIT = 0;
const STATUS_PASS = 1;
const STATUS_REJECTED = 2;

public static function ListStatus(){
    return [
        self::STATUS_PERFECT => 'perfect',
        self::STATUS_WAIT  => 'wait',
        self::STATUS_PASS  => 'passing',
        self::STATUS_REJECTED  => 'rejected',
    ];
}
public function getStatusNameAttribute()
{
    $list = self::ListStatus();
    return isset($list[$this->status]) ? $list[$this->status] : $this->status;
}
0 голосов
/ 04 мая 2018

Вы можете использовать модель getter / setters для этого. Вот грубая реализация, в которой вы бы включили предоставленное значение, но вам может потребоваться вставить это в статический массив ключей / значений, чтобы лучше отобразить между ними.

public function getStatusAttribute($value)
{
    switch ($value) {
        case 0:
            return 'Success';

        case 1:
            return 'Closed';
    }
}

public function setStatusAttribute($value)
{
    switch ($value) {
        case 'Success':
            return $this->attributes['status'] = 0;

        case 'Closed':
            return $this->attributes['status'] = 1;

    }
}

Редактировать: для справки, вот как можно использовать статический массив, чтобы сохранить отображение в одном месте.

class Model
{
    static $statuses = ['Success', 'Closed'];

    public function getStatusAttribute($value)
    {
        return static::$statuses[$value];
    }

    public function setStatusAttribute($value)
    {
        $this->attributes['status'] = array_search($value, static::$statuses);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...