【问题标题】:Search in Related Model using GridView Filter Field使用 GridView 过滤器字段在相关模型中搜索
【发布时间】:2018-01-24 08:39:23
【问题描述】:

问题: 假设我有两张桌子,

Table1            Table2
-authorId         -username

到目前为止,我在搜索模型上的 sql 查询看起来像这样,

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

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

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


我在将数据反映在视图中时遇到了类似的困难,但我能够使用基本模型中的以下 getter 函数来解决它。

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

提前致谢,

【问题讨论】:

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


    【解决方案1】:

    首先,为您的搜索模型添加一个自定义属性

    public $username
    

    在模型中定义与author 表的关系

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

    在您的 gridview 中,将 authorId 列替换为

    `author.username`
    

    并使用以下内容进行比较

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

    是的,请确保您在搜索功能开始时将 searchmodel 查询与author 表一起加入

    ->joinWith('author')
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 试过了,但在搜索和过滤时出现以下错误。添加错误作为答案,因为它太大了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多