2011-11-08 7 views
1

私はObject Model Mappingを初めて使い、CodeIgniter DataMapperのドキュメントを読んでいます。私は例を試してきましたが、私は少し時間がかかっていることにかなり感心しています。Datamapper ORMとテーブルの関係を保存する

しかし、私は一つの問題解決を取得していないようです:顧客と住所:

が、私は2つのテーブルを持っていると言うことができますが。顧客は多くのアドレスを持つことができますが、顧客は1人だけです。

新しい顧客が顧客テーブルに保存されている個人データとアドレステーブルに保存されている住所を入力する必要がある登録フォームがあります。

検証は特定のモデルで行われます。私の問題は、どのようにデータがデータベースに保存される前に両方のテーブルで有効であることを保証できるかです。

現時点では、顧客が有効となりdbに保存される顧客テーブルの正しいデータを入力する可能性がありますが、アドレスデータは検証されず保存されません。

要約:すべてのテーブルのデータが有効であれば、テーブルのデータをdbに保存したいだけです。エラーメッセージを取得する必要があります。

ご協力いただきありがとうございます。

答えて

0

第1の方法は、transactionsを使用し、第2の方法は、アドレスと顧客データの両方を検証し、両方が有効なストアである場合です。

+0

1.私はトランザクションについて考えていましたが、InnoDBではなくMyISAMを使用しているため、私はそれらを使用できません。 2.実際に保存または更新せずにモデルの検証を呼び出す方法はありますか?私はそれを発見していない。 – user1036651

0

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

ありがとうございます。 – user1036651

0

あなたが定義された検証ルールを持っている場合は、明示的(検証を呼び出す必要はありません)、バリデーションルールは、save()を呼び出すときにもチェックされます。

妥当性検査が失敗した場合、save()はFALSEを返します。その後、$ this-> validをチェックして妥当性検査エラーにより保存が失敗したかどうかを確認できます。

関連する問題