Php Silverstripe-不同的下拉字段
我试图用数据对象中的州/省填充下拉列表,但有许多记录具有相同的州。如何仅显示不同的状态 这将返回不同的状态:Php Silverstripe-不同的下拉字段,php,distinct,silverstripe,dropdown,Php,Distinct,Silverstripe,Dropdown,我试图用数据对象中的州/省填充下拉列表,但有许多记录具有相同的州。如何仅显示不同的状态 这将返回不同的状态: $states= DataObject::get()->distinct(true)->column('State'); 这在我的下拉列表中显示为不同的值: DropdownField::create('State', 'State', $states) ->setEmptyString('(Select one)'), 但这
$states= DataObject::get()->distinct(true)->column('State');
这在我的下拉列表中显示为不同的值:
DropdownField::create('State', 'State', $states)
->setEmptyString('(Select one)'),
但这只显示下拉列表中的值作为状态,而不是ID作为状态。我怎样才能填充ID呢
它不喜欢我将它们添加到数组中。您可以使用
SS\u映射
和array\u 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'];
}
您可以使用
SS\u映射
和array\u 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'];
}
结帐