Серебряная полоса — Отдельные выпадающие поля

Я пытаюсь заполнить раскрывающийся список состояниями / провинциями из объекта данных, но существует много записей с одним и тем же состоянием. Как я могу показать только отдельные состояния?

Это возвращает различные состояния:

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

Это показывает как отдельные значения в моем раскрывающемся списке:

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

Но это показывает только значения в раскрывающемся списке как состояния, а не идентификаторы как состояние. Как я могу также заполнить удостоверения личности?

Не нравится, когда я добавляю их в массив.

1

Решение

Вы могли бы использовать 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'];
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector