使用Datamapper ORM保存表关系

时间:2011-11-08 23:38:47

标签: codeigniter codeigniter-datamapper

我是Object Model Mapping的新手,只是阅读了CodeIgniter DataMapper的文档。我已经尝试了这些例子,我很清楚地知道很多时候能够实现这一点。

但我似乎没有解决一个问题:

假设我有两个表:客户和地址。客户可以拥有多个地址,但我只能找到一个客户。

现在,我有一个注册表,新客户必须输入存储在客户表中的个人数据和存储在地址表中的地址。

验证在特定模型中完成。我的问题是如何在将数据保存到数据库之前确保数据对两个表都有效。

目前,客户可能会输入客户表的正确数据,该表已经验证并保存到数据库,但地址数据未验证且未保存。

简而言之:如果所有表的数据都有效,我只想将任何表的数据保存到db。否则我想获取错误消息。

感谢您提前提供任何帮助。

3 个答案:

答案 0 :(得分:0)

第一种方法是使用transactions,第二种方法 - 验证地址和客户数据,如果两者都有效 - 存储。

答案 1 :(得分:0)

documentation并不清楚,但您可以在致电validate()之前调用save()方法:

 public function test()
 {
     // Customers require an email address
     $cust = new Customer();
     $cust->first_name = "Me";
     $cust->validate();
     if ($cust->error->string)
     {
         echo $cust->error->string;
         // outputs The Email Address field is required.
     }
     else
     {
         // validation passed, save customer and related address to db
         $cust->save(array($address));
     }
 }

答案 2 :(得分:0)

如果您定义了验证规则,则无需显式调用validate(),当您调用save()时也会检查验证规则。

如果验证失败,save()将返回FALSE,之后您可以检查$ this->有效以查看验证错误是否导致保存失败。