我成功地实施了http://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview/。哪个一直工作得很好,我的关系名称只是一个单词。但是我的关系名称就像subSector
我得到的那样:Column not found: 1054 Unknown column 'subSector.sub_sector' in 'where clause'
。
public function search($params)
{
$query = Product::find();
// add in relation to be able to search with
$query->joinWith(['sector', 'subSector'];
...
$dataProvider->sort->attributes['sub_sector_search'] = [
// The tables are the ones our relation are configured to
'asc' => ['subSector.sub_sector' => SORT_ASC],
'desc' => ['subSector.sub_sector' => SORT_DESC],
];
...
$query->andFilterWhere([
'product_id' => $this->product_id,
...
])
->andFilterWhere(['like', 'subSector.sub_sector', $this->sub_sector_search])
我还在类初始化下添加了参数,并在规则中添加了安全术语。
到目前为止,所有3个单字关系都适用于过滤,而且两个模型关系都是camelCase返回unknown column
。
答案 0 :(得分:3)
请改用:
->andFilterWhere(['like', Subsector::tableName() . '.sub_sector', $this->sub_sector_search])
等等。
这将解决重复列问题,如果表名将来发生变化,您只需更改模型中的tableName()
方法,而无需在所有过滤器中替换它等。
Framework将此解释为:'subSector.sub_sector'
只是以表名为前缀的列名,因此如果您的表的名称与subSector
不同,例如subsectors
,则它将无效。