我正在尝试在一个视图中构建一个表单,该表单将数据保存到3个不同的表中,这些表在我的MySQL数据库中都有多对多关系,并且在CakePHP模型中具有hasAndBelongsToMany关系。 但是我尝试这样做,它不起作用,它只保存我正在使用的控制器中的数据,或者给我以下MySQL错误:
Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`agenda`.`timetables_weekschedules`, CONSTRAINT `fk_weekschedules_has_timetables_timetables1` FOREIGN KEY (`timetable_id`) REFERENCES `timetables` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTIO)
这是我的View / Weekschedules / jeffrey.ctp中的表单(在工作时会正确重命名):
<div class="form">
<?php echo $this->Form->create('Weekschedule'); ?>
<fieldset>
<legend><?php echo __('Create workschedule'); ?></legend>
<?php
echo "<h1>Period</h1>";
echo $this->Form->input('Period.name');
echo $this->Form->input('Period.description');
echo $this->Form->input('Period.startdatetime');
echo $this->Form->input('Period.enddatetime');
echo "<h1>Weekschedule</h1>";
echo $this->Form->input('Weekschedule.name');
echo $this->Form->input('Weekschedule.oddeven');
echo "<h1>Timetable</h1>";
echo $this->Form->input('Timetable.weekday');
echo $this->Form->input('Timetable.starttime');
echo $this->Form->input('Timetable.endtime');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
当表单输入是这样时,它会抛出MySQL错误,当我格式化不在此控制器中的输入时,如Period.0.name,它只保存Weekschedule数据。
这就是Controller / WeekschedulesController.php中的jeffrey动作目前的样子,我只将Weekschedule id设置为测试,因为我想创建一个新的Weekschedule,但这也行不通。我也尝试了saveAll()和saveAssociated()而不是save()函数,尝试了'deep'=&gt; true,没有任何效果。
public function jeffrey() {
$this->Weekschedule->recursive = 2;
$this->request->data['Weekschedule']['id'] = 95;
debug($this->request->data);
if (!empty($this->request->data)) {
$this->Weekschedule->save($this->request->data);
}
}
我的Weekschedule模型是默认的CakePHP烘焙代码:
<?php
App::uses('AppModel', 'Model');
/**
* Weekschedule Model
*
* @property Period $Period
* @property Timetable $Timetable
*/
class Weekschedule extends AppModel {
/**
* Display field
*
* @var string
*/
public $displayField = 'name';
//The Associations below have been created with all possible keys, those that are not needed can be removed
/**
* hasAndBelongsToMany associations
*
* @var array
*/
public $hasAndBelongsToMany = array(
'Period' => array(
'className' => 'Period',
'joinTable' => 'periods_weekschedules',
'foreignKey' => 'weekschedule_id',
'associationForeignKey' => 'period_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
),
'Timetable' => array(
'className' => 'Timetable',
'joinTable' => 'timetables_weekschedules',
'foreignKey' => 'weekschedule_id',
'associationForeignKey' => 'timetable_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
)
);
}
这是我的routes.php中的一行:
// Jeffrey's test page
Router::connect('/jeffrey', array('controller' => 'weekschedules', 'action' => 'jeffrey'));
我想发布我的数据库图表的截图,但由于我是新来的,我无法发布图片,因此我将尝试描述它:
有一个句号表,其中包含以下列:
然后有一个periods_weekschedules连接表,其中包含以下列:
以下外键:
然后是一个包含以下列的weekchedules表:
然后是timetables_weekschedules连接表,其中包含以下列:
以下外键:
最后是一个包含以下列的时间表表:
由于我是CakePHP的初学者,我希望这是足够的信息来帮助你帮助我,提前感谢! 杰弗里
答案 0 :(得分:0)
如果没有完整的代码并对其进行测试,很难调试这么大的关系。 但如果一切都失败了,您可以手动对
中的数据进行排序$this->request->data
并手动保存每个模型的结果。
另请参阅详细指南:How to save HABTM data in CakePHP