mihail430899
@mihail430899
Вебмастер

Как получить связи связей в YII2?

Делаю проект чисто для себя, для обучения. Реализовую метки для постов. отдельно таблица постов, отдельно меток и отдельно таблица связей между постами и метками.

Что дальше делаю. При получении конкретного поста получаю вместе с ним через with связи с метками. Но поскольку таблица связей не содержит имен меток, а содержит только post_id, label_id, то дальше мне нужно еще дотянутся до имен меток, которые соответственно в отдельной таблице меток, чтобы вывести их в графическом представлении при выводе постов. Не понимаю, как это сделать

Текущий запрос
$posts = Posts::find()->limit(30)->with('labelsrelations')->all();


Сама функция связи в таблице постов:
public function getLabelsrelations(){
	return $this->hasMany(PostsLabelsRelationships::className(), ['post_id' => 'id']);
}


Связь labelsrelations здесь и получает для каждого поста id-шки меток. Остается дотянутся до имен.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
mihail430899
@mihail430899 Автор вопроса
Вебмастер
Про via почитаю. Сделал я пока по-другому. Добавил в запрос:
$posts = Posts::find()->limit(30)->with('labelsrelations.labels')->all();


А в промежуточной модели PostsLabelsRelationships добавил связь с метками.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
usdglander
@usdglander
Yipee-ki-yay
Используйте viaTable.
Ответ написан
Комментировать
kawabanga
@kawabanga
И дополню ответ Lander. Да, viaTable собирает как надо.
Но для listView компонента мне удобнее собирать вручную.
1) К примеру, имеем id всех постов.
2) Забираем промежуточную таблицу жадно, или с помощью запроса.
3) Запрашивает ид необходимых тегов, и держим их в отдельном массиве.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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