如何在Yii的GridView中为关系添加过滤器?

时间:2015-08-03 01:34:05

标签: php gridview yii2

我看到此页面添加了虚拟属性:http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/

型号:

class AdGroupKeywordSearch extends AdGroupKeyword
{
  public $keyword;

  public function getKeyword() {
    return $keyword;
  }

查看:

<?= GridView::widget([
    'filterModel' => $searchModel,
    'columns' => [
        [
          'attribute' => 'keyword.keyword',

控制器:

public function actionIndex()
{
    $searchModel = new AdGroupKeywordSearch();

它用于显示关系,但它不显示用于输入值的文本框。

Imgur

1 个答案:

答案 0 :(得分:2)

我不得不添加到搜索模型中:

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

  public function rules() {
    return [
      [['keyword.keyword'], 'string'],

而不是[['keyword'], 'string'],

这会显示文本框。为了使搜索起作用,我必须在控制器(或数据提供者)中使用

$query = AdGroupKeyword::find()->joinWith('keyword');

而不是

$query = AdGroupKeyword::find()->with('keyword');

$query->andFilterWhere(['like', 'keyword', $searchModel->getAttribute('keyword.keyword')]);

而不是

$query->andFilterWhere(['like', 'keyword', $searchModel->keyword]);

非常奇怪,你必须使用keyword.keyword而不能只使用像keyword这样的虚拟属性。