CakePHP 2.2.5 find('list')将所有id值显示为1

时间:2013-01-22 15:11:36

标签: cakephp cakephp-2.2

在将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
            )

    )

已经尝试

  • 如果Priority是CakePHP中的保留字,则将优先级重命名为PriorityLevel。

请参阅以下相关代码:

控制器代码

$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));

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个。