左连接ActiveRecord(yii2)

HiW*_*iWo 0 activerecord yii yii2

我尝试使用LEFT JOIN发送SQL请求,但它不显示table2表中的数据.

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();
}
Run Code Online (Sandbox Code Playgroud)

ark*_*oak 6

您似乎将此功能添加到模型中,self表示模型本身.

Yii不会返回另一个表的结果,只有在模型上调用find时才会限制模型,而是需要使用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();
Run Code Online (Sandbox Code Playgroud)