Yii2 Querybuilder与searchmodel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2 Querybuilder与searchmodel相关的知识,希望对你有一定的参考价值。

我的搜索模型

$query = (new yiidbQuery())
    ->select(['monthsubmit',"DATE_FORMAT(monthsubmit, '%m-%Y') as c_date", 'modeler', 'count(sku) as count'])
    ->from('sku3d')
    ->groupBy(['monthsubmit', 'modeler'])
    ->orderBy(['monthsubmit'=>SORT_DESC, 'modeler'=>SORT_DESC]);

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

我的控制器

    $searchModel = new Sku3dSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

我的gridview

<?php echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel'=>$searchModel,
    'pjax'=>true,
    'panel' => [
        'type' => GridView::TYPE_PRIMARY,
        'heading' => '<h3 class="panel-title"><i class="glyphicon glyphicon-user"></i>Submitted SKU by Month</h3>',
    ],
    'columns' => [
        [
        'attribute'=>'monthsubmit', 
        'width'=>'310px',
        'filter'=>ArrayHelper::map(Sku3d::find()->orderBy('monthsubmit')->asArray()->all(), 'monthsubmit', 'monthsubmit'), 
        'group'=>true,
    ],
        [
        'attribute'=>'modeler', 
        'width'=>'180px',
        'group'=>true,
        ],

        'count:text:Total Sku',
    ]
]); 
?> 

起初我没有在searchmodel中使用querybuilder,而是在控制器中,一切正常。但我需要过滤它,所以我将我的querybuilder移动到searchmodel。

当我这样做时,它有错误“获取未知属性:app models Sku3d :: count”。

如何将'count(sku) as count'称为gridview。而且看起来我的groupBy(['monthsubmit', 'modeler'])也不起作用。

请告诉我我哪里错了。

谢谢。

答案

在搜索模型中添加公共栏

class Sku3dSearch extends Sku3d
{

    public $count;

    /**
     * @inheritdoc
     */
    public function rules()

    ......





    $query = (new yiidbQuery())
        ->select(['monthsubmit',"DATE_FORMAT(monthsubmit, '%m-%Y') as c_date", 'modeler', 'count(sku) as count'])
        ->from('sku3d')
        ->groupBy(['monthsubmit', 'modeler'])
        ->orderBy(['monthsubmit'=>SORT_DESC, 'modeler'=>SORT_DESC]);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);


}

以上是关于Yii2 Querybuilder与searchmodel的主要内容,如果未能解决你的问题,请参考以下文章

Yii2中DAO

yii2 查询构建器

Yii2 设计模式——简单工厂模式

Yii2 数据操作之Query Builder

学说:QueryBuilder 与 createQuery?

在 TypeORM 中使用 QueryBuilder 与 Repository 都有哪些不同的用例? [关闭]