DieZz
@DieZz

Как получить связанные данные в Active Record Yii2?

Предположим есть таблицы posts и comments, связанные между собой один-ко-многим. (comments.post_id->post.id)

В Laravel я могу получить связанные данные вызовом одного метода:
$post = Post::find()
    ->with('comments')
    ->all();

В результате, если вывести посты в виде массива - я получу нечто подобное:
[
	0 => [
		'id' => 1,
		'title' => 'Some Title',
		'comments' => [
			0 => [
				'id' => 1,
				'comment' => 'Some comment text',
			],
			1 => [
				'id' => 2,
				'comment' => 'Another comment text',
			]
			...
		]
	]
	1 => [
		'id' => 2,
		'title' => 'Another Title',
		'comments' => [
			0 => [
				'id' => 3,
				'comment' => 'Some comment text',
			],
			1 => [
				'id' => 4,
				'comment' => 'Another comment text',
			]
			...
		]
	]
	...
]


В yii используя eager loading можно сделать подобное
$post = Post::find()
    ->with('comments')
    ->all();

но в выходном массиве не будет комментариев.
Возможно ли в YII сделать что-то подобное как в примере на Laravel выше?
  • Вопрос задан
  • 628 просмотров
Пригласить эксперта
Ответы на вопрос 2
Raz-Mik
@Raz-Mik
используй геты. в модели Post добавь например:

public function getComments(){
        return $this->hasMany(Comments::className(), ['post_id' => 'id']);
}
Ответ написан
kawabanga
@kawabanga
Вас жадная загрузка интересует?

Воспользуйтесь тем методом, что вы написали.
$post = Post::find()
->with('comments')
->all();

При этом, прочтите в доках, как работает жадная загрузка в yii2, вот тут zelenin отписывается:
www.yiiframework.ru/forum/viewtopic.php?t=22879
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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