Прошу помочь leftjoin

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Прошу помочь leftjoin

Сообщение SergeyK »

Всем привет, не могу понять что я делаю не так=(

Есть две таблицы, 1 - комментарии, 2 - юзеры
пытаюсь выбрать все запись из таблицы комментариев + приклеить строку из юзеров (если id_user = id)

Код: Выделить всё

$data = $this->find()
            ->select('*')
            ->leftJoin('{{%user}}', '{{%user}}.`id` = {{%comment}}.`id_user`')
            ->where(['{{%comment}}.`id_network`' => $id_network])
            ->all();
 
в ответ получаю тока выборку из комментов, без юзеров :(

спасибо за помощь!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение samdark »

Что такое у вас $this? AR? Если да, то http://www.yiiframework.com/doc-2.0/gui ... ional-data
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение ElisDN »

Код: Выделить всё

$data = self::find()
    ->with('user')
    ->where(['id_network' => $id_network])
    ->all(); 
Аватара пользователя
ksetrin
Сообщения: 81
Зарегистрирован: 2015.03.06, 10:00
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение ksetrin »

ElisDN писал(а):

Код: Выделить всё

$data = self::find()
    ->with('user')
    ->where(['id_network' => $id_network])
    ->all(); 
Прокатит, если у него геттер создан, и пытается работать в модели.
Еще можно сделать так

Код: Выделить всё

$data = (new \yii\db\Query())
            ->select('*')
            ->from('user')
            ->leftJoin('comment', 'comment.id= user.id_user')
            ->where([
                'id_network' => $id_network
            ])
            ->all();
Если не получится, то проверяйте что приходит в $id_network, правильно ли указаны связи
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение ElisDN »

ksetrin писал(а):Еще можно сделать так
Просто так select('*') не прокатит из-зи конфликта столбцов.
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Прошу помочь leftjoin

Сообщение SergeyK »

Извините, я тока учусь, что такое геттeр? :oops:

Пробую этот запрос в базе, все отдается как мне и надо

Код: Выделить всё

SELECT * FROM `cat_comment` LEFT JOIN `cat_user` ON `cat_user`.`id` = `id_user` WHERE `cat_comment`.`id_network`='2'
 
Аватара пользователя
ksetrin
Сообщения: 81
Зарегистрирован: 2015.03.06, 10:00
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение ksetrin »

ElisDN писал(а):
ksetrin писал(а):Еще можно сделать так
Просто так select('*') не прокатит из-зи конфликта столбцов.
Прокатит.
Не прокатит

Код: Выделить всё

->where([
                'id_network' => $id_network
            ])
если у него в 2х таблицах это поле
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Прошу помочь leftjoin

Сообщение SergeyK »

Sam Dark писал(а):Что такое у вас $this? AR? Если да, то http://www.yiiframework.com/doc-2.0/gui ... ional-data
Да, ActiveRecord

Попробовал так:

Код: Выделить всё

$sql = 'SELECT * FROM cat_comment LEFT JOIN cat_user ON cat_user.id = id_user WHERE cat_comment.id_network=:id_network';
$data = $this->findBySql($sql, [':id_network' => $id_network])->all();
return $data;
 
но так же получаю данные из одной таблицы...
Аватара пользователя
ksetrin
Сообщения: 81
Зарегистрирован: 2015.03.06, 10:00
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение ksetrin »

SergeyK писал(а):Всем привет, не могу понять что я делаю не так=(

Есть две таблицы, 1 - комментарии, 2 - юзеры
пытаюсь выбрать все запись из таблицы комментариев + приклеить строку из юзеров (если id_user = id)

Код: Выделить всё

$data = $this->find()
            ->select('*')
            ->leftJoin('{{%user}}', '{{%user}}.`id` = {{%comment}}.`id_user`')
            ->where(['{{%comment}}.`id_network`' => $id_network])
            ->all();
 
в ответ получаю тока выборку из комментов, без юзеров :(

спасибо за помощь!
Если в $this у тебя объект Сomment, то добавить свойства для класса, какие тебе нужны от пользователей (обязательно точно также как они называются в таблице user), например как-то так

Код: Выделить всё

class Сomment extends \yii\db\ActiveRecord
{
    public $user_firstname;
    public $user_email;
    
SergeyK
Сообщения: 26
Зарегистрирован: 2015.05.05, 14:02

Re: Прошу помочь leftjoin

Сообщение SergeyK »

ksetrin писал(а): Если в $this у тебя объект Сomment, то добавить свойства для класса, какие тебе нужны от пользователей (обязательно точно также как они называются в таблице user), например как-то так

Код: Выделить всё

class Сomment extends \yii\db\ActiveRecord
{
    public $user_firstname;
    public $user_email;
    
Добавил:

Код: Выделить всё

class CatComment extends ActiveRecord {

    public $username;
Сработало в случаи с:

Код: Выделить всё

$sql = 'SELECT * FROM cat_comment LEFT JOIN cat_user ON cat_user.id = id_user WHERE cat_comment.id_network=:id_network';
$data = self::findBySql($sql, [':id_network' => $id_network])->all();
Если пытаюсь использовать:

Код: Выделить всё

        $data = $this->find()
            ->select('*')
            ->from('cat_comment')
            ->where(['cat_comment.id_network' => $id_network])
            ->leftJoin('cat_user', 'cat_user.id = id_user')
            ->all();
Возвращает не все записи, только одну... Если убрать select('*'), вернет все записи но в username = NULL
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Прошу помочь leftjoin

Сообщение ElisDN »

ksetrin писал(а):Прокатит.
При leftJoin не прокатит.
ksetrin писал(а):Не прокатит where(['id_network' => $id_network]) если у него в 2х таблицах это поле
Прокатит при with вместо joinWith.
Ответить