我在Yii2中遇到以下情况:
所以,一个例子:
Project with id 1
CustomField with id 2
CustomFieldContent with entityId = 1, type = 'project', customFieldId = 2 and value = 'test'
现在,在Yii的gridview中显示每个项目的自定义内容都没问题。但是,我想让它可搜索和排序。因此,我需要将自定义字段名称作为属性添加到ProjectSearch。但是,由于Yii不允许动态属性,因此无法完成。
关于如何解决这个问题的任何想法?
答案 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 . '%" ');
}]);