CakePHP-保存关联的模型数据

时间:2014-03-14 19:01:57

标签: php cakephp

我有两个模型..一个称为Schedule,另一个称为ScheduleContact

Schedule belongsTo ScheduleContact

从属于scheduleController的动作,我想保存来自主模型的序列化形式的值以及相关的模型。

在我看来,我有以下

<?php echo $this->Form->input('Schedule.start_at', array('id' => 'start_at', 'type' => 'hidden')); ?>
<?php echo $this->Form->input('Schedule.finish_at', array('id' => 'finish_at', 'type' => 'hidden')); ?>
<?php echo $this->Form->input('ScheduleContact.0.name', array('id' => 'name','div' => 'inline-input')); ?>
<?php echo $this->Form->input('ScheduleContact.0.surname', array('id' => 'surname','div' => 'inline-input compact')); ?>

等。

请求数据采用此格式(来自var_dump($this->request->data)):

array (size=3)
  'Schedule' => 
    array (size=3)
      'start_at' => string '2014-3-25 11:15' (length=15)
      'finish_at' => string '2014-03-25 11:30:00' (length=19)
      'donation_method_id' => string '1' (length=1)
  'ScheduleContact' => 
    array (size=1)
      0 => 
        array (size=6)
          'name' => string 'Jane' (length=4)
          'surname' => string 'Powell' (length=6)
          'address' => string 'Hamilton Hodell, 5th Floor 66-68 Margaret Street' length=39)
          'city' => string 'London' (length=6)
          'tel_no' => string '+44(0)20-7636 1221' (length=18)
          'email' => string 'powell_jane@gmail.com' (length=22)
  'log' => 
    array (size=3)
      'ds' => string 'default' (length=7)
      'sql' => string 'SELECT `Schedule`.`id`, `Schedule`.`donation_method_id`, `Schedule`.`schedule_contact_id`, `Schedule`.`start_at`, `Schedule`.`finish_at`, `DonationMethod`.`id`, `DonationMethod`.`donation_method`, `DonationMethod`.`recovery_time`, `DonationMethod`.`duration`, `ScheduleContact`.`id`, `ScheduleContact`.`name`, `ScheduleContact`.`surname`, `ScheduleContact`.`address`, `ScheduleContact`.`city`, `ScheduleContact`.`tel_no`, `ScheduleContact`.`email`, `ScheduleContact`.`donor_id` FROM `blood_services_db`.`schedule'... (length=852)
      'hash' => string '5f2b2b3a462f6555cb5290fb49c42df04a7948e0' (length=40)

最后,我试图像这样保存数据:

if($this->Schedule->saveAssociated($this->request->data)){ 这不会保存数据库中的任何内容,因此永远不会满足此if条件。

可能有什么不对?感谢

2 个答案:

答案 0 :(得分:1)

基本上问题是需要在主模型中应用saveAssociated。考虑到这一点,正如上面所设置的那样,主模型有一个bolongsTo关系,这意味着the current model contains the foreign key.,这也是正确的。那你可能会问的问题在哪里?

问题是saveAsocciated等同于

 $user = $this->User->save($this->request->data);

        // If the user was saved, Now we add this information to the data
        // and save the Profile.

        if (!empty($user)) {
            // The ID of the newly created user has been set
            // as $this->User->id.
            $this->request->data['Profile']['user_id'] = $this->User->id;
         }

这意味着它首先尝试保存主模型。因此,我的设置不正确,因为主模型需要ScheduleContact,因为在成功插入Schedule id中的数据后,外键将保存在ScheduleContact模型中。

你去了......一旦你超越了学习曲线,CakePHP就会很棒。

答案 1 :(得分:0)

你的Model-Name正在打破Cake的命名约定。它应该是:

  

ScheduleContact

有几个问题可以给你一个更好的答案:

  • 您可以添加模型关联变量($ belongsTo等)吗?

  • 您是否使用可包含行为?