1

我是对象模型映射的新手,刚刚阅读了 CodeIgniter DataMapper 的文档。我已经尝试了这些例子,我对一个人能用很少的时间取得很多成就印象深刻。

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

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

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

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

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

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

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

4

3 回答 3

0

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

于 2011-11-09T07:51:09.780 回答
0

从文档中不清楚,但您可以在调用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));
     }
 }
于 2011-11-09T15:21:12.460 回答
0

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

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

于 2011-12-23T20:18:53.540 回答