2017-05-10 18 views
1

データオブジェクトから州/州をドロップダウンに移そうとしていますが、同じ状態のレコードが多数あります。どのようにして明確な状態のみを表示できますか?Silverstripe - 別個のドロップダウンフィールド

これは、異なる状態を返します。

$states= DataObject::get()->distinct(true)->column('State'); 

これは私のドロップダウンのように別個の値を示しています。

DropdownField::create('State', 'State', $states) 
        ->setEmptyString('(Select one)'), 

をしかし、これが唯一のIDのように状態とではないとドロップダウンの値を示しているが状態。どのようにしてIDの値を入力することができますか?

配列に追加すると、好きではありません。

+0

チェックアウトhttp://stackoverflow.com/questions/39338922/select-distinct-on-a-シングルカラム使用シルバーストライプのオーブ –

答えて

4

SS_Maparray_unique()を使用できます。データベースクエリを手動で構築するのと同じくらい効率的ではありませんが、何千もの行がない限り問題はありません。

$statesMap = MyStateDataObject::get()->map('ID', 'State'); 
$states = array_unique($statesMap->toArray()); 
$field = DropdownField::create('State', 'State', $states); 

他の方法は何かのように、これを行うためのデータベースクエリを構築することです:

$query = SQLSelect::create() 
    ->setSelect(array('ID', 'State')) 
    ->setFrom('MyStateDataObject') 
    ->setGroupBy('State'); 

$states = array(); 
foreach ($query->execute() as $row) { 
    $states[$row['ID']] = $row['State']; 
} 
+0

これはうまくいきました。ありがとうございました! – Craig

関連する問題