Вывод результата Many to Many в Yii 2 с помощью GridView?

1. Даны три таблицы: Email, Categories, Emailcategories
2. Реализована связь Many to Many (каждый имейл может находится в разных Категориях )
3. С помощью геттера получаю многомерный массив который содержит категорию/категории для каждого имейла
public function getItems()
    {
        return $this->hasMany(Categories::className(),['category_id' => 'category_id'])
            ->viaTable('Emailcategories',['email_id' => 'email_id']);
    }

4. В результате в GridView мне надо вывести это в колонке Категории (в каждой ячейке будет минимум одна категория)
Сейчас у меня получается вывести лишь первый элемент:
[
                'attribute' => 'category_id',
                'label' => 'Категория',
                'value' => 'items.0.category',
]


Как разобрать этот массив items чтобы он выводил соответствующий вложенный элемент в соответствующую строку таблицы.
  • Вопрос задан
  • 1698 просмотров
Решения вопроса 1
@matperez
Можете в value передать анонимку, а в ней уже сформировать строку какую захочется. Вроде такого:
'value' => function($model) {
 return implode(',', $model->items);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Vitalij_D Автор вопроса
Функция сработала:
'value' =>  function($data) {
                    $str ='';
                    foreach($data['items'] as $item)
                    {
                        $str.=$item['category'].',';
                    }
                    return $str;
                },
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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