Yii2:在计算列上创建过滤器

时间:2015-04-11 13:06:33

标签: php filter yii2

我在我的模型ot_note.php中创建了一个函数,如

public function getOtServices(){
$instrumentsq= Yii::$app->db->createCommand
("SELECT group_concat(im.instrument_name)as instrument
from instrument_master im,  ot_note otn, ot_instrument_entry oie where
otn.id=oie.ot_note_id  and oie.instrument_name=im.id and otn.id=$this->id");

 $instruments=$instrumentsq->queryScalar();
 return $instruments;
    }

然后在我的index.php中,我已经包含了返回值 像:

[
  'label'=>'services',
   'attribute'=>'otServices',
   'value'=>'otServices'
],
ot_note_search.php

中的

public $otServices;
public function rules()
    {
        return [
            ['otServices'], 'safe'],            
        ];
    }



->andFilterWhere([ 'like', 'otServices' , $this->otServices ])

现在列中的值显示正确,但过滤器无效,我收到sql错误。

我需要一些帮助,我应该如何在此计算列上设置过滤器。

1 个答案:

答案 0 :(得分:0)

您的" getOtServices"方法正在"和.FilterWhere"而不是" otServices"属性 - 请参阅其基础组件类" __ get"方法。你在这里遇到mysql错误,因为你的搜索模型没有" id"在" getOtServices"结尾使用的值SQL查询。

我会调整以删除getOtServices方法并添加$ query-> addSelect([" group_concat(im.instrument_name)作为工具..."]) - 但我没有足够的信息关于你的搜索方法。无论如何,我相信这是你走的正确方向。