【发布时间】:2011-07-03 04:54:54
【问题描述】:
我有两个与 HABTM 相关的模型:缺席和用户。对于上下文,用户申请缺勤(因此,用户别名为申请人,缺勤别名为缺勤申请)。我正在尝试为“应用”和“收回”创建控制器功能,这将分别添加一条 HABTM 记录和删除一条 HABTM 记录。我已经将代码保存到可以保存一条记录的地步,但不再保存了。现在我的“应用”控制器代码被硬编码以添加几条记录,但它只添加最后一个请求的记录。这是我的控制器代码:
function apply($id = null) {
if (!$id) {
$this->Session->setFlash(__('Invalid id for absence', true));
$this->redirect(array('action'=>'index'));
}
$this->Absence->recursive = 1;
$user = $this->Session->read('User');
$absence = $this->Absence->read(null, $id);
$data = array(
array(
'Applicant' => array('id' => 1),
'Absence' => array('id' => 4)
),
array(
'Applicant' => array('id' => 2),
'Absence' => array('id' => 4)
)
);
//$data = array_unique($data);
if ($this->Absence->saveAll($data)) {
$this->Session->setFlash('Application was successful');
} else {
$this->Session->setFlash('Application failed');
}
$this->set(compact('data'));
}
我可以看到调试查询中正在处理 $data 中的两个条目,但由于某种原因,其中一个被删除了。有谁知道为什么?以下是该控制器代码运行的一些查询(注意 19、25 和 26):
11 START TRANSACTION 0 0
12 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
13 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
14 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
15 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
16 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
17 UPDATE `absences` SET `id` = 4, `modified` = '2011-07-03 00:28:39' WHERE `absences`.`id` = 4 1 0
18 SELECT `AbsencesUser`.`user_id` FROM `absences_users` AS `AbsencesUser` WHERE `AbsencesUser`.`absence_id` = 4 0 0 0
19 INSERT INTO `absences_users` (`absence_id`,`user_id`) VALUES (4,1) 1 0
20 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
21 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
22 SELECT COUNT(*) AS `count` FROM `absences` AS `Absence` WHERE `Absence`.`id` = 4 1 1 0
23 UPDATE `absences` SET `id` = 4, `modified` = '2011-07-03 00:28:39' WHERE `absences`.`id` = 4 0 0
24 SELECT `AbsencesUser`.`user_id` FROM `absences_users` AS `AbsencesUser` WHERE `AbsencesUser`.`absence_id` = 4 1 1 0
25 DELETE `AbsencesUser` FROM `absences_users` AS `AbsencesUser` WHERE `AbsencesUser`.`absence_id` = 4 AND `AbsencesUser`.`user_id` = (1) 1 1
26 INSERT INTO `absences_users` (`absence_id`,`user_id`) VALUES (4,2) 1 0
27 COMMIT 0 123
【问题讨论】:
标签: cakephp has-and-belongs-to-many