在CakePHP中获取多个插入项的ID有很多项
说明/解释: 在“添加事件”页面上,可以添加多个计划。当您saveAll()时,它会保存事件数据和所有计划数据-这工作正常 但是,我想处理日程数据,并在“dates”表中构建单独的行 所以-我正在加载日期模型,并重复通过的每个计划,处理/插入日期(基于重复、开始日期等) 我的问题: 我需要每个计划的日期id(“计划id”字段)。在重复过程中,如何获取各个计划的id?目前,我正在这样做:在CakePHP中获取多个插入项的ID有很多项,cakephp,cakephp-1.3,has-many,saving-data,Cakephp,Cakephp 1.3,Has Many,Saving Data,说明/解释: 在“添加事件”页面上,可以添加多个计划。当您saveAll()时,它会保存事件数据和所有计划数据-这工作正常 但是,我想处理日程数据,并在“dates”表中构建单独的行 所以-我正在加载日期模型,并重复通过的每个计划,处理/插入日期(基于重复、开始日期等) 我的问题: 我需要每个计划的日期id(“计划id”字段)。在重复过程中,如何获取各个计划的id?目前,我正在这样做: foreach($this->data['Schedule'] as $i => $value)
foreach($this->data['Schedule'] as $i => $value) {
$this->data['Date']['schedule_id'] = $this->Event->Schedule->id;
//other stuff here
$this->Date->saveAll($this->data['Date']);
}
但这在每个循环中给了我相同的id。问题是,
$this->Event->Schedule->id
只保存插入的最后一个id。这就是为什么你总是得到相同的id
我假设您正在事件控制器的add函数中执行这个foreach循环。
如果您想要每个自己的insert id,您不应该在事件上执行saveAll,而应该遍历每个计划(就像您已经做的那样)并将计划保存在那里。这可能是这样的:
foreach ($this->data['Schedule'] as $schedule) {
$schedule['event_id'] = $this->Event->id; //this is needed because we don't do a saveAll on the Event anymore
$this->Event->Schedule->save($schedule);
//Here comes your part
$this->data['Date']['schedule_id'] = $this->Event->Schedule->id;
//other stuff here
$this->Event->Schedule->Date->saveAll($this->data['Date']);
}
希望这有帮助 问题是,
$this->Event->Schedule->id
只保存插入的最后一个id。这就是为什么你总是得到相同的id
我假设您正在事件控制器的add函数中执行这个foreach循环。
如果您想要每个自己的insert id,您不应该在事件上执行saveAll,而应该遍历每个计划(就像您已经做的那样)并将计划保存在那里。这可能是这样的:
foreach ($this->data['Schedule'] as $schedule) {
$schedule['event_id'] = $this->Event->id; //this is needed because we don't do a saveAll on the Event anymore
$this->Event->Schedule->save($schedule);
//Here comes your part
$this->data['Date']['schedule_id'] = $this->Event->Schedule->id;
//other stuff here
$this->Event->Schedule->Date->saveAll($this->data['Date']);
}
希望这有帮助 它确实有用,谢谢你。唯一的问题是,它不会像saveAll()那样同时验证它们。是否有一种方法可以先验证它们,然后进行这种类型的保存?非常感谢你的帮助!我相信我回答了我自己的问题-您可以手动验证-这里的信息:它确实有帮助,谢谢。唯一的问题是,它不会像saveAll()那样同时验证它们。是否有一种方法可以先验证它们,然后进行这种类型的保存?非常感谢你的帮助!我相信我已经回答了我自己的问题-您可以手动验证-信息如下: