Задать вопрос
@dudoser
студент

Как джоинить в Yii2?

Пишу проект на Yii2.
У меня есть три таблицы: юзеры, статьи, категории
мне нужно сделать вывод статьи где будет: кто написал, время публикации, категория, картинка, заголовок
написал SQL запрос:
SELECT article.id, article.image, article.title, article.date, user.f_name, user.l_name, category.name FROM article LEFT JOIN category ON article.category_id = category.id LEFT JOIN user ON article.user_id = user.id


Как мне в проекте вывести все это добро? (через консоль все выводится, запрос правильный)

я пробовал так:
$query = "SELECT article.id, article.image, article.title, article.date, user.f_name, user.l_name, category.name FROM article LEFT JOIN category ON article.category_id = category.id LEFT JOIN user ON article.user_id = user.id";

			$articles = Article::findBySql($query)->all();

Но выводится только данные из таблицы статей....не джоинит таблицы юзер и категорий.

О методах Yii2 я знаю, хотелось бы именно на чистом SQL реализовать, не важно правильно так или нет, это я пишу для себя, просто практика.
  • Вопрос задан
  • 332 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если надо просто данные вывести, то для этого есть связи, зачем join?
www.yiiframework.com/doc-2.0/guide-db-active-recor...
public function getAuthor(){
return $this->hasOne(User::classname(),['id'=>'user_id']);
}
public function getCategory(){
return $this->hasOne(Category::classname(),['id'=>'category_id']);
}
//somewhere
echo $model->category->name;
echo $model->author->f_name;

Так же связи помогут и с join если надо:
$query = Article::find()->joinWith(['author','category']);
$query->andWhere(['user.f_name'=>'Вася']);
Ответ написан
Maksclub
@Maksclub
maksfedorov.ru
работайте с более низкой абстракцией (DAO)
https://github.com/yiisoft/yii2/blob/master/docs/g...

Пример:
$articles = Yii::$app->db->createCommand('SELECT article.id, article.image, article.title, article.date, user.f_name, user.l_name, category.name
FROM article 
LEFT JOIN category ON article.category_id = category.id 
LEFT JOIN user ON article.user_id = user.id')
 ->queryAll();


Только запросы не делайте в контроллерах :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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