与ActiveRecord的左连接(yii2)

与ActiveRecord的左连接(yii2),activerecord,yii,yii2,Activerecord,Yii,Yii2,我尝试使用左联接发送SQL请求,但它不显示表2中的数据 似乎您正在将此函数添加到模型中,并且self表示模型本身 Yii不会从另一个表返回结果,仅当您在模型上调用find时,Yii才会限于该模型,相反,您需要使用db查询,如下所示: $query = new \yii\db\Query; $query->select('*') ->from('table 1 g1') ->leftJoin('table2 s1',

我尝试使用左联接发送SQL请求,但它不显示表2中的数据


似乎您正在将此函数添加到模型中,并且self表示模型本身

Yii不会从另一个表返回结果,仅当您在模型上调用find时,Yii才会限于该模型,相反,您需要使用db查询,如下所示:

    $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();

似乎您正在将此函数添加到模型中,并且self表示模型本身

Yii不会从另一个表返回结果,仅当您在模型上调用find时,Yii才会限于该模型,相反,您需要使用db查询,如下所示:

    $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();

正确的SQL查询是

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

其中g1.some\u field=s1.some\u field是定义联接的字段。

正确的SQL查询是

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

其中g1.some\u field=s1.some\u field是定义联接的字段。

我有类似于…(join)的工作代码: 使用用户和用户朋友列表

                                 $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();
                                }

我的工作代码类似于…: 使用用户和用户朋友列表

                                 $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();
                                }

您还需要将表2中的列添加到select子句中。@PawełDuda,我试过了。我得到了相同的结果。请尝试以下操作:从表1 g1中选择*在g1.id=s1.g_id上左连接表2 s1,其中s1.id=从表2 s2中选择MAXid,其中s2.g_id=g1.id限制:限制显示表中的DDL SQL。您的SQL查询不正确。请看下面我的答案。您还需要将表2中的列添加到select子句中。@PawełDuda,我试过了。我得到了相同的结果。请尝试以下操作:从表1 g1中选择*在g1.id=s1.g_id上左连接表2 s1,其中s1.id=从表2 s2中选择MAXid,其中s2.g_id=g1.id限制:限制显示表中的DDL SQL。您的SQL查询不正确。见下面我的答案。