在将1.3 CakePHP应用程序升级到2.2.5的过程中,我在find('list')
上收到意外结果。
有谁知道为什么我为id
值获得1而不是数据库中存储的增量值,即1,2,3,4,5?
当我运行控制器代码(如下所示)时,我得到:
Array
(
[1] => 5
)
我想得到的是:
Array
(
[1] => 1 (urgent)
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)
如果我将其更改为find('all')
,我会: * 请注意,[id]
值始终为1 *
Array
(
[0] => Array
(
[Priority] => Array
(
[id] => 1
[description] => 1 (urgent)
)
)
[1] => Array
(
[Priority] => Array
(
[id] => 1
[description] => 2
)
)
[2] => Array
(
[Priority] => Array
(
[id] => 1
[description] => 3
)
)
[3] => Array
(
[Priority] => Array
(
[id] => 1
[description] => 4
)
)
[4] => Array
(
[Priority] => Array
(
[id] => 1
[description] => 5
)
)
)
已经尝试
请参阅以下相关代码:
控制器代码
$priorities = $this->Ticket->Priority->find('list', array('fields' => array('Priority.id', 'Priority.description'),'order' => 'Priority.description'));
型号代码
class Ticket extends AppModel {
public $name = 'Ticket';
public $belongsTo = array('Affect', 'Priority', 'User', 'Status');
public $validate = array(
'priority_id' => array(
'rule' => 'notEmpty',
'message' => 'Please assign a priority to this ticket'
)
);
}
class Priority extends AppModel {
public $name = 'Priority';
}
查看代码
echo $this->Form->input('Ticket.priority_id',
array('type' => 'select',
'empty' => true,
'tabindex' => 2));
答案 0 :(得分:0)
如果优先级有很多票,那么您应该从Priority.php
模型开始并添加以下内容:
public $hasMany = array(
'Tickets' => array(
'className' => 'Ticket',
'foreignKey' => 'priority_id',
)
);
然后你的Ticket.php
模型类看起来很好,但是,我会用以下方式编写它:
public $belongsTo = array(
'Priority' => array(
'className' => 'Priority',
'foreignKey' => 'priority_id',
)
);
您必须确保Db中的表Tickets
有一个名为priority_id
的列,以便我们设置正确的关系。
然后在您的故障单控制器中,这样的事情应该很容易实现:
$priorities = $this->Ticket->Priority->find('list');
如果这不起作用,如果你想将你的两个模型类和你的控制器压缩并发送给我,我会很高兴看到它。为了方便起见,您可以发送优先级和票证表的结构。
答案 1 :(得分:0)
答案:将id
表格中的priorities
字段的数据类型从tinyint(1)
更改为tinyint(2)
。
说明: CakePHP似乎将tinyint(1)
解释为布尔值。但是,我之所以使用它是因为我知道优先级列表只有1到5个。