Добрый день.
Тут не нужно использовать swith().
Вы бы полностью показали, что именно Вы выводите?
Товар и название магазина, в котором находится товар?
Если да, то Вы вообще не туда смотрите.
Надо использовать связи между таблицами, тогда вывод названия магазина сократится до одной строки.
UPD.
Допустим у Вас есть таблица магазинов и ещё какая-то таблица(допустим называется goods), где хранится только id магазина.
Тогда в моделях делаете связи.
Первая связь в модели магазинов
public function getGoods()
{
return $this->hasMany(Googs::class, ['id_shop' => 'id']);
}
Вторая связь в модели Goods
public function getShop()
{
return $this->hasOne(Shop::class, ['id' => 'id_shop']);
}
Тогда в таблице gridView, чтобы вывести название магазина, всё сводится к паре строк
[
'attribute' => 'id_shop',
'value'=> 'shop.name'
],
Всё!
И не надо никакого дерьмокода в виде swith()!!!