2017-05-10 12 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- single-column-using-silverstripe-orm –

답변

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