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 重命名为 PriorityLevel 以防 Priority 是 CakePHP 中的保留字。

请参阅下面的相关代码:

控制器代码

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

2 回答 2

0

答:将表中id字段的数据类型由改为。prioritiestinyint(1)tinyint(2)

说明: CakePHP 似乎解释tinyint(1)为布尔值。但是,我使用它是因为我知道优先级列表只会从 1 到 5。

于 2013-01-23T09:15:50.610 回答
0

如果 Priority 有很多票,那么您应该从Priority.php模型开始并添加以下内容:

public $hasMany = array(
    'Tickets' => array(
        'className' => 'Ticket',
        'foreignKey' => 'priority_id',
            )
);

然后你的Ticket.php模型类看起来不错,但是,我会用以下方式编写它:

public $belongsTo = array(
    'Priority' => array(
        'className' => 'Priority',
        'foreignKey' => 'priority_id',
    )
);

您必须确保TicketsDb 中的表有一个名为的列priority_id,以便我们拥有正确的关系集。

然后在您的票务控制器中,这样的东西应该很容易工作:

$priorities = $this->Ticket->Priority->find('list');

如果这不起作用,如果你想压缩你的模型类和控制器并将它们发送给我,我会很高兴看到它。为了使事情更容易,您可以发送优先级和票证表的结构。

于 2013-01-22T16:12:51.210 回答