如何在Yii2中搜索相关值?

时间:2015-10-05 15:01:09

标签: search yii2

我在Yii2中遇到以下情况:

  • 项目模型
  • CustomField,定义自定义字段类型以及是否应将其应用于Projects(其他选项是员工和公司)
  • CustomFieldContent,与实体(本例中为项目)和自定义字段类型
  • 相关

所以,一个例子:

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

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

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

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

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

以下简短摘录

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

并扩展where条件以进行过滤。

/* Add your filtering criteria */

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