@XenK

Yii2 получить записи GriwView?

Есть такая структура БД:

bc37d730954141929b72b8cf743a4fc1.PNG

Необходимо в отдельной колонке GridView, вывести всех авторов для одной книги.

Пробовал в модели Авторы, делать такую связь:
/**
     * @return \yii\db\ActiveQuery
     */
    public function getAuthorsBooks()
    {
        return $this->hasMany(AuthorsBooks::className(), ['authors_id' => 'id'])->viaTable('books', ['id' => 'books_id']);
    }


Как это лучше всего реализовать?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
....
[
  'attribute'=>'authorsBooks',
  'value'=>function($model){
      return implode(',',ArrayMap::getColumn($model->authorsBooks,'name'));
    }
]
...

Можно в модели метод реализовать
public function getAutorsString(){
  return implode(',',ArrayMap::getColumn($this->authorsBooks,'name'));
}

соответственно в gridView:
....
[
  'attribute'=>'authorsBooks',
  'value'=>'autorsString'
]
...

Второй вариант более логичен, так как избегает дублирования кода. Я так понимаю много где надо выводить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov
Web developer
GridView::widget([
	...
	'columns' => [
		...
		'author' => [
			'label' => 'Авторы', 
			'format' => 'html',
			'value' => function (Book $book) {
				foreach($book->authorsBooks...
				return ...;
			},
		],
	],
])
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы