Yii2 - 使用分页到ActiveRecord的联合查询

时间:2018-02-04 15:16:59

标签: yii yii2

我有一个案例需要联合查询,同时最终结果为 ActiveRecord 。为了说明,我有两个表产品类别。每个都有一个从ActiveRecord扩展的模型。我试图进行如下查询

$deletedProducts = Products::find()->select([$productsTable . '.id', $productsTable . '.selling_price'])
                ->where(['client' => $clientId])
                ->andWhere(['<>', 'hidden', 0]);

$deletedCats = Category::find()->select([$catTable . '.id', $catTable . '.selling_price'])
                ->where(['client' => $clientId])
                ->andWhere(['<>', 'hidden', 0]);

$archivedItemsQuery = $deletedProducts->union($deletedCats);

然后我通过 ActiveDataProvider

返回结果
$dataProvider = new ActiveDataProvider(
            [
                'query' => $archivedItemsQuery,
        ]
    ]);
return $dataProvider->getModels();

问题在于,当我尝试在请求中发送分页数据或通过ActiveDataProvider设置分页数据时,不会发生分页。我当然可以将此查询更改为

$unionQuery = (new \yii\db\Query())
                ->from(['counter_items' => $archivedItemsQuery]);

这导致正确的分页,但我没有得到 ActiveRecords 的结果。

有关如何使用 1创建联合查询的任何想法。分页工作和2.结果是ActiveRecord。

1 个答案:

答案 0 :(得分:1)

您好,您可以尝试以下方式,但不是最好的方法,但我希望它适合您,我测试了我的结果,如果我理解正确,您希望$dataProvider->getModels()的结果返回{{1模型对象即ActiveRecord模型,并希望Products分页同时正常工作。

您需要通过以下方式更改GridView以使用联合ActiveDataProvider

$archivedItemsQuery