2012-10-23 110 views
0

我有兩個模型:EventVenue。一個事件屬於一個場所,而一個場地可以有許多事件。我試圖用一張表單一次性保存一個Event和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爲零;它沒有設置爲新創建的Venue的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

蛋糕*建議*您需要首先保存主/父模型,在這種情況下,這將是'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'); 
} 

感謝所有的評論。