2013-01-22 25 views
2

在將1.3 CakePHP應用程序升級到2.2.5的過程中,我在find('list')上獲得了意想不到的結果。CakePHP 2.2.5 find('list')顯示所有id值爲1

有沒有人知道爲什麼我得到1爲id值而不是數據庫中存儲的增量值,即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 
      ) 

    ) 

已經嘗試過

  • 更名優先PriorityLevel的情況下,優先在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)); 
+0

您可以發佈您的優先級模型嗎? –

+0

我沒有Priority.php模型文件,因爲我現在不需要定義任何驗證規則或關聯。但是,我用上面的代碼創建了它(添加到我的問題中)。儘管如此,仍然沒有改變。 – weedave

+0

好的。另一個問題,你檢查你的MySQL表,以確保ID是真的增量? –

回答

0

答:priorities表更改id字段的數據類型從tinyint(1)tinyint(2)

說明: CakePHP似乎將tinyint(1)解釋爲布爾值。但是,我使用這個,因爲我知道優先級列表只會是從1到5.

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', 
    ) 
); 

你必須確保你的數據庫表Tickets有一個名爲priority_id所以我們有正確的relati列onship集合。

然後在你的門票控制器這樣的事情應該很容易的工作:

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

如果這不起作用,如果要壓縮你的模型類和控制器的兩個,並將其發送給我,我會很高興看到它。爲了使事情更容易,您可以發送優先級和票據表的結構。

+0

試過這個,但是現在在'on clause''錯誤中得到'未知列'Priority.ticket_id'。這是事實,優先級表中沒有ticket_id字段。票據表中有一個priority_id字段。 – weedave

+0

這是因爲您的Priorities表沒有'ticket_id'列。這給我們帶來了一個問題:你在這裏試圖實現的邏輯是什麼?它是「一個優先票有多少票」還是一張票有很多優先票# –

+0

優先票有很多票。該系統是一個IT支持應用程序,用戶可以提出支持服務單和管理員爲票證分配優先級。 – weedave