2015-03-10 5 views
0

Я попытался отправить запрос SQL с LEFT JOIN, но он не отображает данные из таблицы table2.left join with ActiveRecord (yii2)

public static function top($limit) 
{ 
    return self::findBySql(" 
     SELECT * FROM table 1 g1 
     LEFT JOIN table2 s1 
     ON (g1.id = s1.g_id AND s1.id = (
      SELECT MAX(id) 
      FROM table2 s2 WHERE s2.g_id = g1.id 
     )) 
     LIMIT :limit", 
    [':limit' => $limit] 
    )->all(); 
} 
+0

Вы должны добавить столбцы из table2, а также для вашего выбора пункта. –

+0

@ PawełDuda, я попробовал. Я получил тот же результат. – HiWo

+0

Попробуйте это: SELECT * FROM таблица 1 g1 LEFT JOIN таблица2 s1 ВКЛ (g1.id = s1.g_id) где s1.id = ( SELECT MAX (ID) ОТ таблица2 с2 ГДЕ s2.g_id = g1.id ) LIMIT: limit – ankitr

ответ

6

Кажется, вы добавляете эту функцию в модели и само представляет саму модель.

Yii не будет возвращать результаты из другой таблицы и будет ограничен моделью только если вы звоните находку на модели, вместо этого вам нужно использовать запрос дб, как показано ниже:

$query = new \yii\db\Query; 
    $query->select('*') 
      ->from('table 1 g1') 
      ->leftJoin('table2 s1', 's1.g_id AND s1.id = (SELECT MAX(id) FROM table2 s2 WHERE s2.g_id = g1.id') 
      ->limit($Limit); 
    $command = $query->createCommand(); 
    $resp = $command->queryAll(); 
0

Правильный SQL-запрос:

SELECT * FROM table 1 g1 
     LEFT JOIN table2 s1 
     ON g1.some_field = s1.some_field 

где g1.some_field = s1.some_field - это поля, которые определяют объединение.

0

Я работаю код что-то вроде ... :) с пользователем и user_friend_list

        $query = new Query; 
           $query ->select(['user.id AS user_id', 'user_friend_list.id']) 
             ->from('user') 
             ->innerJoin('user_friend_list', 'user.email = user_friend_list.email'); 

           $command = $query->createCommand(); 
           $data = $command->queryAll(); 
           foreach($data as $datakey) 
           { 
            //echo $datakey['id']; 
            $friendfind = UserFriendList::findOne($datakey['id']); 
            $friendfind->is_app_using_user_id=$datakey['user_id']; 
            $friendfind->save(); 
           }