2013-01-22 2 views
2

1.3 CakePHP 앱을 2.2.5로 업그레이드하는 과정에서 find('list')에서 예기치 않은 결과가 나타납니다.CakePHP 2.2.5 모든 id 값을 1로 표시하는 find ('list')

누구나 내가 왜 id 값이 1,2,3,4,5 인 데이터베이스에 저장된 증분 값 대신에 1을 얻는 지 알고 있습니까? 내가 얻고 싶은 것은

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'; 
    } 
    

    보기 코드

    0 :

아래 관련 코드를 참조하십시오 우선 순위는 다음 많은 티켓이있는 경우

echo $this->Form->input('Ticket.priority_id', 
          array('type' => 'select', 
          'empty' => true, 
          'tabindex' => 2)); 
+0

우선 순위 모델을 게시 할 수 있습니까? –

+0

현재 유효성 검사 규칙이나 연결을 정의 할 필요가 없기 때문에 Priority.php 모델 파일이 없습니다. 하지만, 위의 코드로 작성했습니다 (제 질문에 추가되었습니다). 그 후에도 변화가 없습니다. – weedave

+0

확인. 또 다른 질문은, 당신은 ID가 정말로 점진적인지 확인하기 위해 MySQL 테이블을 점검 했습니까? –

답변

0

답변 : tinyint(1)에서 tinyint(2)priorities 테이블의 id 필드의 데이터 유형을 변경.

설명 : CakePHP는 tinyint(1)을 부울로 해석합니다. 그러나 우선 순위 목록이 1에서 5가 될 것임을 알았 기 때문에 이것을 사용했습니다.

0

당신은 Priority.php 모델을 시작하고 다음을 추가한다 : 그런 다음 Ticket.php 모델 클래스가 나는 다음과 같은 방법을 쓸 것이다, 그러나 잘 보이는

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

를 :

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

당신은 DB의 테이블 Tickets 우리가 올바른 relati이 너무 priority_id라는 이름의 열이 있는지 확인해야 onship set.

다음과 같이 귀하의 티켓 컨트롤러 뭔가 쉽게 작동합니다 지역 :

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

를 문제가 해결되지 않으면, 당신은 당신의 모델 클래스와 컨트롤러의 모두를 압축하여 I 될 것입니다 저에게 보내려면 그것을 보니 기쁘다. 일을 더 쉽게하기 위해 우선 순위 테이블과 티켓 테이블 구조를 함께 보낼 수 있습니다.

+0

시도했지만, 'on clause'에서 'Unknown column'Priority.ticket_id '오류가 발생했습니다. 이는 사실이며 우선 순위 테이블에 ticket_id 필드가 없습니다. 티켓 테이블에는 priority_id 필드가 있습니다. – weedave

+0

우선 순위 테이블에'ticket_id' 열이 없기 때문입니다. 그러면 우리가 여기서 구현하고자하는 논리는 무엇입니까? '우선권에는 많은 티켓이 있습니까? 아니면'우선권이 많은 티켓입니까? ' –

+0

우선권에는 많은 티켓이 있습니다. 이 시스템은 사용자가 지원 티켓을 제기하고 관리자가 티켓에 우선 순위 수준을 지정하는 IT 지원 응용 프로그램입니다. – weedave