2012-10-23 73 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'); 
} 

感谢所有的评论。