使用GridView过滤器字段在相关模型中搜索

时间:2018-01-24 08:39:23

标签: php gridview yii2 yii2-advanced-app yii2-basic-app

问题:   让我说我有两张桌子,

Table1            Table2
-authorId         -username

截至目前,我对搜索模型的SQL查询看起来像这样,

->andFilterWhere(['"Table1"."authorId"' => $this->authorName]);

只有使用authorID进行搜索和过滤才有用。

预期结果   我想基于authorname而不是authorId进行搜索。

我在视图中反映数据方面遇到了类似的困难,但我能够在基本模型中使用以下getter函数修复它。

public function getAuthorName() {
        return $this->author->username;
    }

先谢谢,

2 个答案:

答案 0 :(得分:0)

假设authorIdtable2的FK,并且您已预先加入table2 table1,则可以执行以下操作:

->andFilterWhere(['table2.username' => $this->authorName]);

答案 1 :(得分:0)

首先,为搜索模型添加自定义属性

public $username

定义模型中author表的关系

public function getAuthor() {
        return $this->hasOne(Author::className(),['id'=>'authorId']);
    }

gridview中用

替换authorId
`author.username`

并使用以下内容进行比较

$query->andFilterWhere(['like', '{{%Table2}}.username',$this->username]);

并确保您在搜索功能的开头使用author表加入searchmodel查询

->joinWith('author')