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

Search in Related Model using GridView Filter Field

问题: 假设我有两个表,

Table1            Table2
-authorId         -username

截至目前,我的 sql 搜索模型查询如下所示,

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

它只有助于使用 authorID 进行搜索和过滤。

预期结果 我想根据作者姓名而不是 authorId 进行搜索。


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

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

提前致谢,

假设 authorIdtable2 的 FK,并且您之前已将 table2 加入 table1,您可以执行以下操作:

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

首先,将自定义属性添加到您的搜索模型

public $username

在模型中定义与您的 author table 的关系

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

在您的 gridview 中将 authorId 列替换为

`author.username`

并用下面的来比较

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

是的,请确保在搜索功能

的开头使用 author table 加入搜索模型查询
->joinWith('author')