首页 > 解决方案 > yii2:将查询联合放在第一个查询的最后一个对象上

问题描述

我在 yii2 上有脚本:

$query = HrKaryawan::find()
            ->where(['hr_karyawan.outlet_id' => $params['outlet_id']]);

$subquery = (new \yii\db\Query())
                            ->from('hr_karyawan')
                            ->where(['=', 'id',1]);
$query->union($subquery, true);

$dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => array('pageSize' => 10),
]);

结果是子查询总是在每页的最后一个,在第 1 页的第 11 行,第 2 页的第 21 行,...

我只想在最后一行和最后一页上制作它。谁能帮我?

标签: phpmysqlsqlpaginationyii2

解决方案


它将显示 11,因为对第一个查询设置了限制,之后将附加子查询

(SELECT * FROM `hr_karyawan` LIMIT 10) UNION ALL ( SELECT * FROM `hr_karyawan` WHERE `id` = 1);

解决方案可能是使用包装查询:

$wrapperQuery = new Query();
$wrapperQuery->from($query);

你的代码看起来像这样:

$query = HrKaryawan::find()
            ->where(['hr_karyawan.outlet_id' => $params['outlet_id']]);

$subquery = (new \yii\db\Query())
                            ->from('hr_karyawan')
                            ->where(['=', 'id',1]);
$query->union($subquery, true);

$wrapperQuery = new Query();
$wrapperQuery->from($query);

$dataProvider = new ActiveDataProvider([
            'query' => $wrapperQuery,
            'pagination' => array('pageSize' => 10),
]);

推荐阅读