Я пытаюсь заполнить раскрывающийся список состояниями / провинциями из объекта данных, но существует много записей с одним и тем же состоянием. Как я могу показать только отдельные состояния?
Это возвращает различные состояния:
$states= DataObject::get()->distinct(true)->column('State');
Это показывает как отдельные значения в моем раскрывающемся списке:
DropdownField::create('State', 'State', $states)
->setEmptyString('(Select one)'),
Но это показывает только значения в раскрывающемся списке как состояния, а не идентификаторы как состояние. Как я могу также заполнить удостоверения личности?
Не нравится, когда я добавляю их в массив.
Вы могли бы использовать SS_Map
а также array_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'];
}
Других решений пока нет …