2014-10-07 4 views
1

첫 번째 Cake 앱을 작성하고 첫 번째 깊은 연관성을 설정하려고합니다. 거의 작동하지만 거의 문제가 없습니다.find()가 될 때까지 작동하지 않는 CakePHP 양식 필드

그래서 고객을 추가 할 양식을 만들었습니다. 고객은 많은 주소를 가지고 있고 주소는 많은 연락처를 가지고 있습니다. 내가 가진 문제는 형식 도우미가 형식 지정을 위해 연락처 필드를 인식하지 않는 것입니다. 그러나 작업에서 find()를 수행하면 양식이 올바르게 표시됩니다. 그것은 모델이 사용되기 전까지 연결되지 않는 것과 같습니다.

add.ctp 

echo $this->Form->input('CustomerAddress.0.CustomerContact.title', 'options' => array('Mr' => 'Mr', 'Miss' => 'Miss', 'Mrs' => 'Mrs', 'Ms' => 'Ms', 'Dr' => 'Dr')))."\n"; 
echo $this->Form->input('CustomerAddress.0.CustomerContact.first')."\n"; 
echo $this->Form->input('CustomerAddress.0.CustomerContact.last')."\n"; 
..... 

echo $this->Form->input('CustomerAddress.address1')."\n"; 
echo $this->Form->input('CustomerAddress.address2')."\n"; 
..... 

echo $this->Form->input('type', array('label' => 'Business Customer?'))."\n"; 

그래서, CustomerAddress 필드가, 잘 작동 :이 제출 될 때까지

Here's the 3 models: 

class Customer extends AppModel { 
    public $hasMany = 'CustomerAddress'; 
} 

class CustomerAddress extends AppModel { 
    public $belongsTo = 'Customer'; 
    public $hasMany = 'CustomerContact'; 
} 

class CustomerContact extends AppModel { 
    public $belongsTo = 'CustomerAddress'; 
} 

, 추가 조치는 기본적으로보기에서 몇 가지 추출물을 아무것도 그래서 나는 것을 게시 귀찮게하지 않지만, 여기에 데이터베이스와 일치하는 올바른 유형, 제한된 길이 등이지만 CustomerContact 필드는 전혀 작동하지 않습니다. 마찬가지로, 잘못된 데이터를 제출하면 추가 작업은 saveAll을 수행하고 실패하지만 양식 필드가 올바르게 표시됩니다.

페이지가 표시되기 전에 작업에 find()를 추가하면 정상적으로 작동합니다. 모델이 사용될 때까지 모델이 포함되지 않은 것과 같습니다.

아마도 모델이나 뭔가를 읽으려는 간단한 명령이있을 것입니다.하지만 조금 갇혀 있습니다.

+0

$ belongsTo, $ hasMany는 문자열이 아닌 배열이어야합니다. – bancer

+0

아니요, 문자열은 단일 관계에 대해서는 문제가 없지만 재귀 적 찾기는 정상적으로 작동합니다. – Dabrowski

답변

1

ok, 많이 파고 난 후에, 컨트롤러에서 ->loadModel을 호출하여이 작업을 할 수 있습니다. 이 경우 거의 모든 경우에 3 가지 모델을 모두로드해야하므로 매번 beforeFilter을 추가했습니다.

나는 어떤 모델에 대한 코드를 변경할 수 있지만 컨트롤러에이를 추가하지 않았다

CustomerController.php 

class CustomerController extends AppController { 
    public $helpers = array('Html', 'Form', 'Humanize'); 

    public function beforeFilter() { 
     // Load associated models 
     $this->loadModel('CustomerAddress'); 
     $this->loadModel('CustomerContact'); 
    } 

    ..... 
} 

CustomerContact 모델 대신 CustomerAddress 모델의 고객 모델에서로드하더라도, 케이크 존중 보인다 관계를 만들고 CustomerAddress 아래로로드하십시오. 처음에 나는 시도했다 :

$this->CustomerAddress->loadModel('CustomerContact'); 

그러나 실패했다. 이런 식으로 잘 작동하는 것 같습니다.