Yii2过滤相关模型,其中关系名称为较低的camelCase

时间:2015-12-26 04:07:19

标签: php yii2

我成功地实施了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

1 个答案:

答案 0 :(得分:3)

请改用:

->andFilterWhere(['like', Subsector::tableName() . '.sub_sector', $this->sub_sector_search])

等等。

这将解决重复列问题,如果表名将来发生变化,您只需更改模型中的tableName()方法,而无需在所有过滤器中替换它等。

Framework将此解释为:'subSector.sub_sector'只是以表名为前缀的列名,因此如果您的表的名称与subSector不同,例如subsectors,则它将无效。