使用 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;
}
提前致谢,
假设 authorId
是 table2
的 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')
问题: 假设我有两个表,
Table1 Table2
-authorId -username
截至目前,我的 sql 搜索模型查询如下所示,
->andFilterWhere(['"Table1"."authorId"' => $this->authorName]);
它只有助于使用 authorID 进行搜索和过滤。
预期结果 我想根据作者姓名而不是 authorId 进行搜索。
我在视图中反映数据时遇到了类似的困难,但我能够通过基本模型中的以下 getter 函数修复它。
public function getAuthorName() {
return $this->author->username;
}
提前致谢,
假设 authorId
是 table2
的 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')