【问题标题】:yii2: put the query union on the last object of first queryyii2:将查询联合放在第一个查询的最后一个对象上
【发布时间】:2021-06-09 04:38:54
【问题描述】:

我在 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 行,...

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

【问题讨论】:

    标签: php mysql sql pagination yii2


    【解决方案1】:

    会显示 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),
    ]);
    

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 1970-01-01
      • 2014-01-16
      • 2018-05-04
      • 2020-04-26
      • 2020-06-06
      • 2013-06-24
      • 2020-01-07
      • 1970-01-01
      相关资源
      最近更新 更多