2011-11-08 68 views
1

我是新的對象模型映射,只是閱讀CodeIgniter DataMapper的文檔。我已經嘗試過這些例子,我對很少有人能夠完成很多事情印象深刻。保存與Datamapper的表關係ORM

但我似乎並沒有得到一個問題就解決了:

可以說我有兩個表:客戶和地址。一個客戶可以有很多地址,但只能解決一個客戶的問題。

現在,我有一個註冊表格,新客戶必須輸入存儲在客戶表中的個人數據和地址表中存儲的地址。

驗證在特定模型中完成。我的問題是如何在將數據保存到數據庫之前確保數據對這兩個表格都有效。

目前客戶有可能輸入客戶表的正確數據,該數據驗證並保存到數據庫,但地址數據未驗證並且未保存。

簡而言之:我只想將任何表的數據保存到數據庫,如果所有表的數據驗證其他我想獲取錯誤消息。

感謝您提前提供任何幫助。

回答

0

第一種方法是使用transactions,第二個 - 驗證地址和客戶數據,如果兩者都有效 - 存儲。

+0

1.我一直在考慮事務,但因爲我使用MyISAM而不是InnoDB,所以我無法使用它們。 2.是否有方法可以調用模型的驗證而不實際保存或更新。我沒有找到它。 – user1036651

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

非常感謝。 – user1036651

0

如果你有驗證規則定義,你並不需要顯式調用的validate()時,當您調用save()時,驗證規則也會被檢查。

如果驗證失敗,save()將返回FALSE,之後您可以檢查$ this-> valid以查看驗證錯誤是否導致保存失敗。