2015-10-05 61 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 . '%" '); 
}]);