2012-10-23 5 views
0

저는 두 모델이 있습니다 : EventVenue입니다. events belongsTo Venue, Venue는 많은 이벤트를 가질 수 있습니다. 나는 하나의 형식으로 하나의 이벤트와 장소를 저장하려고 노력하고있다. 이것은 내가 내 컨트롤러에 지금까지 무엇을 가지고 :CakePHP와 관계가 저장되지 않았습니다. 관계가 같습니다.

public function add() { 
    if ($this->request->is('post')) { 
     if ($this->Event->saveAll($this->request->data)) { 
      $this->Session->setFlash('Event successfully saved'); 
     } 
    } 
} 

을 그리고 이것은 내 양식이다 : 아주 간단한

<?php 
    echo $this->Form->create('Event'); 
    echo $this->Form->inputs(array(
     'legend' => 'Event Details', 
     'Event.date', 
     'Event.title' 
    )); 
    echo $this->Form->inputs(array(
     'legend' => 'Venue Details', 
     'Venue.name', 
     'Venue.street_address', 
     'Venue.locality' => array('label' => 'Town/city'), 
     'Venue.postal_code' 
    )); 
    echo $this->Form->end('Save Event'); 
?> 

.

이제 EventVenue 레코드가 모두 생성됩니다. 그러나 내 events 테이블의 venue_id 테이블은 0입니다. 새로 생성 된 장소의 ID로 설정되지 않았습니다. 이 문제를 어떻게 해결할 수 있습니까? 나는 그것이 꽤 간단하다고 확신한다!

편집 :Event 모델 :

<?php 
class Event extends AppModel { 

    public $name = 'Event'; 
    public $actsAs = array(
     'Containable' 
    ); 
    public $belongsTo = array(
     'Venue' 
    ); 
} 

Venue 모델 :

<?php 
class Venue extends AppModel { 
    public $name = 'Venue'; 
    public $hasMany = array(
     'Event' 
    ); 
} 
+0

연결이 올바르게 설정되어 있습니까? 나에게 잘 어울리는구나. – Ross

+0

나는 그렇게 믿는다. 질문에 내 모델 정의를 추가했습니다. –

+0

Cake *는 주/부모 모델을 먼저 저장해야한다고 추측합니다.이 경우에는 'Venue'' Venue (parent) hasMany Event (children)'가 될 것입니다. 그래서 'Venue' 컨트롤러/모델/뷰 대신에 같은 일을 시도해보십시오. – Ross

답변

0

내가 saveAll() 방법을 사용하는 경우 array('deep' => true)를 사용하는 데 필요한 것 같습니다.

if ($this->Event->saveAll($this->request->data, array('deep' => true))) { 
    $this->Session->setFlash('Event successfully saved'); 
} 

그럼에도 불구하고 모든 사람에게 감사드립니다.

관련 문제