php - 如何在 GridView 上显示过滤模型关系

标签 php gridview activerecord yii yii2

我有两个表:

  • 国家
  • 城市

并且在模型中有关系。

为什么城市没有过滤器?

public function getCountry()
{
    return $this->hasOne(Country::className(), ['id' => 'c_id']);
}

GridView 图片:

GridView Image

最佳答案

您可以通过简单地访问它来做到这一点:

'columns'=>[
   'country.columnName',
]);

在模型中覆盖 attributes() 函数:

public function attributes()
{
    // add related fields to searchable attributes
    return array_merge(parent::attributes(), ['country.columnName']);
}

将其添加到规则中:

public function rules()
{
     return [
         [['country.columnName'], 'safe'],
            // ... more stuff here
     ];
}

search() 方法中,将其添加到您的 Query 中:

$query->andFilterWhere(['LIKE', 'country.columnName', $this->getAttribute('country.columnName')]);

================================ 或 ============== ===================

'columns' => [
   [
       'attribute' => 'countryFilter',
       'value' => function($model) {
           return $model->country->columnName;
        }
   ]
]);

要过滤它,请在搜索类中添加自定义属性:

public $countryFilter;

在规则中添加:

public function rules()
{
     return [
         [['countryFilter'], 'safe'],
            // ... more stuff here
     ];
}

search() 方法中添加与 Query 的关系:

->joinWith(['country'])

然后将过滤内容添加到Query:

->andFilterWhere(['like', 'country.columnName', $this->countryFilter])

要对其进行排序,请添加:

$dataProvider->sort->attributes['countryFilter'] = [
                'asc'  => ['country.columnName' => SORT_ASC],
                'desc' => ['country.columnName' => SORT_DESC],
            ];

文档中提供了更多信息:Displaying & sorting relational data

关于php - 如何在 GridView 上显示过滤模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45278944/

相关文章:

ruby-on-rails - Rails update_attribute 没有保存

javascript - 使用 React JS 和 Laravel 处理多张图片上传

php - Google PageSpeed Insights API 截图到文件

c# - 在 asp.net 中更改 gridview 的自动生成的选择列的文本 - 如何?

asp.net - 在 GridView 中使用 jQuery?

java - 在android中运行时比较项目点击上的GridView图像

ruby-on-rails - activerecord 存在子查询

mysql - 多列上的组的 Activerecord 查询返回以数组作为键的散列

php - 分享我的网站链接时,规范网址被抓取,而不是我在 facebook 中的原始网址

javascript - 我无法让 php 使用 onclick() 进行重定向