簡體   English   中英

關系名稱為低駝色的相關模型的Yii2過濾器

[英]Yii2 filter on related model where relation name is lower camelCase

我已經成功地實現了http://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview/的工作。 在我的關系名稱只是一個單詞的情況下,這種方法一直很好。 但是,在我的關系名稱類似於subSectorColumn 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

使用此代替:

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

等等。

這將解決重復列的問題,並且如果表名將來會更改,則只需要在模型中更改tableName()方法,而無需在所有過濾器中替換它,等等。

框架將以下'subSector.sub_sector'為: 'subSector.sub_sector'只是以表名作為前綴的列名,因此,如果您的表的名稱不同於subSector ,例如subsectors ,它將無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM