CakePHP表单验证是否使用其他模型进行验证和/或保存?

CakePHP表单验证是否使用其他模型进行验证和/或保存?,cakephp,Cakephp,所以我的问题很像标题。我有一个名为StudentApplicationForm的表单对象。这使用了一些称为grade_element_form.ctp、schools_element_form.ctp、student_element_form.ctp和guardian_element_form.ctp的元素。所有人都有各自的输入,并在提交表格时发送到my StudentApplicationForm模型。我想使用Grade、School、Student和Guardian对象来验证数据,然后将它们

所以我的问题很像标题。我有一个名为StudentApplicationForm的表单对象。这使用了一些称为grade_element_form.ctp、schools_element_form.ctp、student_element_form.ctp和guardian_element_form.ctp的元素。所有人都有各自的输入,并在提交表格时发送到my StudentApplicationForm模型。我想使用Grade、School、Student和Guardian对象来验证数据,然后将它们各自的信息保存在数据库中各自的表中

我能够构建适当的数组,将其发送到表单中每个对象的模型,并将它们保存到数据库中。现在我想确保它们在保存之前经过验证。这是通过以下方法实现的最佳方法:

$this->ModelName->set($the_data)

if($this-ModelName->validate()){
//true
}else{
//false
}

如图所示:

如果模型是相关的,您可以使用$this->Model->saveAll()或$this->Model->saveAssociated()将所有数据放在一个数组中,正确格式化,然后保存,一次保存所有数据

如果它们不相关,则需要使用事务。对于事务,保存前无需调用$this->ModelName->validate()。启动事务,尝试保存每个事务,如果其中一个事务失败,则回滚,启动事务后尝试的所有更改将不在数据库中。如果每件事都成功了,就去做吧

例如:

 $dataSource = $this->Model1->getDataSource(); 
 $dataSource->begin();

 if(!$this->Model1->save($array1))
 {
      $dataSource->rollback();
      $this->Session->setFlash('There was an error saving model 1');
      return;
 }

 //Continue the pattern for the other models...

 //If all the saves succeeded then...
 $dataSource->commit();

不,我是问我是否应该这样验证。并不是说我有错误。因为读取数据验证(validation()和set()函数)似乎是我想要的。然后在验证表单的所有部分后,保存到数据库中,对吗?我只是想确保我的方法是正确的,它们都是相关的。一个学生可能有许多学校,一个学校可能有许多年级,一个学生可能有许多监护人。我在看协会吗?如果没有,则事务可能会工作。在这种情况下,是的,您应该能够使用saveAssociated将它们全部保存在一起。但是,您必须使用设置“deep”=>true。在提交表单之前,我需要创建一个与学生、监护人和学校(以及学校的成绩表)相关的代码,并将该信息添加到要保存的表单数据中。该代码是所有4个的外键。那么有没有办法将其插入提交表单中呢。我只想创建它,如果它们被验证为保存,然后将代码与所有相关模型一起保存。我不确定我是否理解您的要求。您可以尝试使用隐藏的表单字段,但通常不建议通过表单传递外键,因此最好通过检查数据库来确定要使用哪些外键。因此,我谈论的是创建外键并将其与其他数据(如学生或监护人)一起保存。