Cakephp查询数据库中的枚举字段

时间:2016-07-05 09:38:34

标签: mysql database cakephp enums

我在数据库中有一个字段。它的类型是枚举,它看起来像

enum('NO ANSWER', 'ANSWERED', 'BUSY').

我需要将这些值放入下拉列表中。如何在cakephp中编写查询? 我试过了:

$result = TableRegistry::get('Calls')->find('list', ['valueField' => 'disposition'])->distinct('disposition')->toArray();

但它返回

[
(int) 1 => null,
(int) 77 => '',
(int) 64 => 'NO ANSWER',
(int) 65 => 'ANSWERED',
(int) 72 => 'BUSY'
]

但我需要这样的事情:

[
(int) 1 => 'NO ANSWER',
(int) 2 => 'ANSWERED',
(int) 3 => 'BUSY'
]

3 个答案:

答案 0 :(得分:2)

  

我需要将这些值放入下拉列表

除非枚举值经常发生变化(如果是,为什么要使用枚举......)只需将您需要的数据放在某处:

$options = [
    'NO ANSWER' => 'NO ANSWER',
    'ANSWERED' => 'ANSWERED',
    'BUSY' => 'BUSY'
];

然后使用它:

echo $this->Form->select('field', $options);

请注意$options中的键是要提交的内容,值将显示的内容。有关select方法的更多信息,请参见the documentation

答案 1 :(得分:1)

我在某处找到了这个答案,但我再也找不到了。你可以这样做:

BorderLayout

然后在您的表单中,您可以使用AD7six的答案结束并添加:

$cols = $this->Model->query("show columns from table_name like 'enum_column_name'")
$enum = explode(',', substr(str_replace(array("'", "(", ")"),'',$cols[0]['COLUMNS']['Type']), 4));
$options = array_combine($enum, $enum);

答案 2 :(得分:0)

问题是enum的值是在create table中定义的,它们不是查询表数据时可用的数据。 How can I get enum possible values in a MySQL database? SO主题描述了如何通过php代码获取enum的值。只需确保重新分配枚举值的键,使键从1开始,而不是从0开始(0表示空值)。