2015-10-05 58 views
0

我在Yii2以下情况:如何搜索Yii2中的相关值?

  • 项目模型
  • 的CustomField,定义自定义字段类型以及是否应适用于项目(其他选项是员工和公司)
  • CustomFieldContent,相关这两个实体(项目在这种情况下)和自定义字段类型

所以,一个例子:

Project with id 1 CustomField with id 2 CustomFieldContent with entityId = 1, type = 'project', customFieldId = 2 and value = 'test'

现在,在Yii的gridview中显示每个项目的自定义内容是没有问题的。但是,我想让它搜索和排序。因此,我需要将自定义字段名称作为属性添加到ProjectSearch。但是,由于Yii不允许使用动态属性,因此无法做到这一点。

关于如何去做这件事的任何想法?

+0

您应该只是阅读这个http://www.yiiframework.com/doc-2.0/guide-output-data-widgets.html#working-with-model-relations – soju

回答

0

对于可搜索和可排序的内容,我建议你这个tutorial在哪里你可以找到有用的样本来建立你所需要的。 (场景nuber 2更适合您的需求)

短期而言,您应该扩展您的基本模型,添加您需要的关系,在searchModel中设置适当的函数,添加到字段/关系的dataProvider-> setSort并添加过滤条件。

以下的一个片段

$dataProvider->setSort([ 
    'attributes' => [ 
     .... 
     'yourRelatedField' => [ 
      'asc' => ['field1' => SORT_ASC, ], 
      'desc' => ['field1' => SORT_DESC,], 
      'label' => 'your Laber', 
      'default' => SORT_ASC 
     ], 
    ] 
]); 

并延伸用于滤波的,其中的条件。

/* Add your filtering criteria */ 

// filter CustomFieldContent 
$query->joinWith(['table_a' => function ($q) { 
    $q->where('table_a.CustomFieldContent LIKE "%' . $this->CustomFieldContent . '%" '); 
}]);