【问题标题】:Saving table relationships with Datamapper ORM使用 Datamapper ORM 保存表关系
【发布时间】:2011-11-08 23:38:47
【问题描述】:

我是对象模型映射的新手,刚刚阅读了 CodeIgniter DataMapper 的文档。我已经尝试了这些示例,我对一个人可以用很少的时间完成很多工作印象深刻。

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

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

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: codeigniter codeigniter-datamapper


    【解决方案1】:

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

    【讨论】:

    • 1.我一直在考虑事务,但由于我使用的是 MyISAM 而不是 InnoDB,所以我无法使用它们。 2. 有没有办法在不实际保存或更新的情况下调用模型验证。我还没找到。
    【解决方案2】:

    documentation看不清楚,但是可以在调用save()之前调用validate()方法:

     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));
         }
     }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-11
        • 1970-01-01
        • 2015-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多