我要走出大山 2023-11-09 16:57 采纳率: 61.9%
浏览 1
已结题

yii2 order模型下2张表如何分页展示列表

yii2,有一个Order模型,由于测试数据量增加,需要拆分数据存放2张订单表,分别是:order_1、order_2,每个表有100万条数据,问题是:如何在后台对2个表同时搜索查询,并分页展示在列表页;每页展示10条数据。正常一张表情况下的查询代码如下,请修改下面代码适合2张表查询:

public function actionIndex()
    {

        $searchModel = new SearchModel([
            'model' => Order::class,
            'scenario' => 'default',
            'partialMatchAttributes' => ['mobile'], // 模糊查询
            'defaultOrder' => [
                'id' => SORT_DESC
            ],
            'pageSize' => $this->pageSize
        ]);

        $query = $searchModel->search(Yii::$app->request->queryParams);
        $query->query
            ->andWhere(['>=', 'status', 1])
            ->andFilterWhere(['merchant_id' => $this->getMerchantId()])
            ->with(['tags', 'merchant']);

        return $this->render($this->action->id, [
            'dataProvider' => $query,
            'searchModel' => $searchModel,
        ]);

前端代码为:

……(省略)
<?= GridView::widget([
                    'dataProvider' => $dataProvider,
                    'filterModel' => $searchModel,
                    'headerRowOptions' => [
                        'class' => 'table-header-wrap'
                    ],
                    'columns' => [
                        [
                            'class' => 'yii\grid\SerialColumn',
                            'visible' => true, // 不显示#
                        ],
                        [
                            'attribute' => 'order_id',
                            'filter' => false, //不显示搜索框
                            'headerOptions' => ['class' => 'col-md-1'],
                        ],
……(省略)
  • 写回答

8条回答 默认 最新

  • bug菌¹ Java领域优质创作者 2023-11-09 18:50
    关注

    该回答引用ChatGPT,望对题主有所帮助/启发;若有帮助,还望采纳。


    要在yii2的Order模型下的两张订单表(order_1和order_2)中进行搜索查询并分页展示,您可以按照以下步骤进行:

    1. 创建新的SearchModel:在创建SearchModel实例时,您需要传入两个模型类(Order_1和Order_2)和相应的查询配置。
    $searchModel = new SearchModel([
        'models' => [
            Order_1::class,
            Order_2::class
        ],
        'scenario' => 'default',
        'partialMatchAttributes' => ['mobile'], // 模糊查询
        'defaultOrder' => [
            'id' => SORT_DESC
        ],
        'pageSize' => $this->pageSize
    ]);
    
    1. 合并查询结果:在查询时,您可以使用Yii2的Union查询来合并两个表的查询结果。
    $query = $searchModel->search(Yii::$app->request->queryParams);
    $query->joinWith(['tags', 'merchant'])
        ->andWhere(['>=', 'status', 1])
        ->andFilterWhere(['merchant_id' => $this->getMerchantId()]);
    
    $dataProvider = new ActiveDataProvider([
        'query' => $query->union(),
        'pagination' => [
            'pageSize' => 10
        ]
    ]);
    
    1. 修改前端代码:在GridView部分,您可以将dataProvider改为新创建的dataProvider,以展示合并后的查询结果。
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'headerRowOptions' => [
            'class' => 'table-header-wrap'
        ],
        'columns' => [
            [
                'class' => 'yii\grid\SerialColumn',
                'visible' => true, // 不显示#
            ],
            [
                'attribute' => 'order_id',
                'filter' => false, //不显示搜索框
                'headerOptions' => ['class' => 'col-md-1'],
            ],
            // 其他列
        ],
    ]) ?>
    

    通过这个修改,您就可以在后台同时搜索查询两张表的订单数据,并按照每页10条数据进行分页展示。请确保在此代码中替换相应的模型和关联关系。

    希望以上内容对您有所帮助!如果您有任何疑问,请随时提问。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月10日
  • 创建了问题 11月9日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373