如何从数据库表填充cakephp3中的选择下拉列表。
目前,Cakephp生成一个数字索引的数组(选项列表)。
选项值应具有数据库记录的id(不应该是Cakephp生成的数字键)
部门(表)是对事件进行分类的分类。 应存储基于部门的事件列表的事件(表)。
某个事件可能属于许多部门。我如何实现这一目标?
EventsController.php
<?php $department_results = $connection->execute('SELECT departmentname FROM department')->fetchAll('assoc'); // list of departments
$this->set('departmentvalues', $department_results );
事件:add.ctp
<?php echo $this->Form->input('department', array('label' => false,
'div' => false,
'type' => 'select',
'multiple'=>'checkbox',
'legend' => 'false',
'options' => $departmentvalues,
'empty' => 'Please select a Department'
));
目标: 使用数据库中的值的选择下拉列表,选项值应该是数据库记录的id
预期结果:
<select name="department"><option value="2">Maths</option><option value="4">Physics</option></select>
&#13;
问题: cakephp生成数字索引的选项数组。
<select name="department"><option value="0">Maths</option><option value="1">Physics</option></select>
&#13;
答案 0 :(得分:1)
您应该使用CakePHP标准来查询模型,而不是原始SQL,尤其是在简单列表的情况下。
以下内容应该符合您的要求:
$department_results = $this->Departments->find('list')
->hydrate(false)
->fields(['id','departmentname'])
->toArray();
$this->set('departmentvalues', $department_results);
请注意,您需要包含已命名列departmentname
的字段。默认情况下,find('list')
应返回id
和name
字段。
答案 1 :(得分:1)
另一种选择是以这种方式设置 displayField : `class DepartmentsTable扩展了表{
public function initialize(array $config) {
parent::initialize($config);
$this->displayField('departmentname');
}
}` 在控制器中,您可以通过这种方式调用方法find('list'):
$departments= TableRegistry::get("Departments");
$departmentvalues=$departments->find('list')
->hydrate(false)
->toArray();
$this->set('departmentvalues', $department_results);