@DronTat

Как заменить значения из БД в вьюшке?

Переписываю приложение Yii1 на Yii2 для себя(учусь).
Не получается заменить числовые значения из БД на текстовые во вьюшке.
Yii1
вьюшка:
array(
            'header' => 'Стоянка',
            'value' => function($data)
                        {
                        $res = !empty($data->transport_storage)?(Transport::upload($data->transport_storage->storage_id)):"";
			return $res;
			},
        ),

Модель:
public static function upload($storageId) {
	$storage[2] = 'Парковка №1';
	$storage[3] = 'Парковка №2';
	$storage[4] = 'Парковка №3';
	$storage[5] = 'Парковка №4';
	return $storage[$storageId];
    }

Как переделать это в Yii2 и есть ли более правильный способ написания?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если я правильно понял, то должен быть гетер в моделе:
public static function parkingList() {
  return  [
       1 => 'Парковка №1',
       2 => 'Парковка №2';
];
}

public function getParkingName(){
  $list = self::parkingList();
  return (isset($this->transport_storage) and isset($list[$this->transport_storage->storage_id])) ? $list[$this->transport_storage->storage_id] : 'не заданно';
}

соответственно во вью будет
[
            'header' => 'Стоянка',
            'value' => 'parkingName'
]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Не совсем понятно, где именно у Вас хранятся данные.
Вы пытаетесь вывести из связной модели или нет?
Вообще-то так делается:
'value' => 'name'; // если это родная модель
// or 
'value' => 'model->related->name'; // если нужно получить данные через связь hasOne()

Вывод в DerailView такой
[
   'attribute' => 'name_attribute',
   'value' => function($model){
       return Transport::upload()....;
   }
]


С этим массивом тоже мало что понятно.
public static function upload($storageId) {
  $storage[2] = 'Парковка №1';
  $storage[3] = 'Парковка №2';
  $storage[4] = 'Парковка №3';
  $storage[5] = 'Парковка №4';
  return $storage[$storageId];
    }

У Вас есть число, которое надо привести к строке(грубо говоря)?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы