问题: 让我说我有两张桌子,
Table1 Table2
-authorId -username
截至目前,我对搜索模型的SQL查询看起来像这样,
->andFilterWhere(['"Table1"."authorId"' => $this->authorName]);
只有使用authorID进行搜索和过滤才有用。
预期结果 我想基于authorname而不是authorId进行搜索。
我在视图中反映数据方面遇到了类似的困难,但我能够在基本模型中使用以下getter函数修复它。
public function getAuthorName() {
return $this->author->username;
}
先谢谢,
答案 0 :(得分:0)
假设authorId
是table2
的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')