徐善通的随笔

千里之行, 始于足下



Yii2.0中使用子查询的方法


第一步

先创建一个子查询, 可以是基于 yii\db\Query 创建, 也可以基于Model

$subQuery = Order::find()
        ->where(['user_id' => $userId])
        ->andWhere(['status' => $status]);

也可以增加排序,分页,比如

$subQuery->orderBy(['id' => SORT_ASC])
        ->offset($offset)
        ->limit($pageSize);

第二步

接下来就可以在我们的主查询中使用这个子查询了, 只要是在mysql中可以写子查询的地方, 都可以直接使用这个子查询

$list = (new Query())->select($field)
        ->from(['order' => $subQuery]) // 在这里使用了子查询
        ->leftJoin(['goods' => OrderGoods::tableName()], 'order.id = goods.order_id')
        ->createCommand()
        ->queryAll();

最终生成的sql

SELECT
    *
FROM
    ( SELECT
            * 
        FROM
            `od_order` 
        WHERE
            ( `user_id` = '1' ) 
        ORDER BY
        `id` ASC
        LIMIT 10 OFFSET 1 
    ) `order`
LEFT JOIN `od_order_goods` `goods` ON `order`.id = goods.order_id

是不是觉得很简单呢

参考: https://www.yiichina.com/doc/guide/2.0/db-query-builder


作者: 徐善通
地址: https://www.xstnet.com/article-87.html
声明: 除非本文有注明出处,否则转载请注明本文地址


我有话说



最新回复


正在加载中....

Copyrights © 2016-2019 醉丶春风 , All rights reserved. 皖ICP备15015582号-1