1

私はオブジェクトモデルマッピングに不慣れで、CodeIgniterDataMapperのドキュメントを読んだだけです。私は例を試してみましたが、多くのことを達成できる時間がどれほど短いかに非常に感銘を受けました。

しかし、私は1つの問題を解決していないようです:

顧客と住所の2つのテーブルがあるとします。顧客は多くの住所を持つことができますが、住所は1人の顧客のみです。

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

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

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

つまり、すべてのテーブルのデータが検証された場合にのみ、任意のテーブルのデータをdbに保存したい。それ以外の場合は、エラーメッセージを取得したい。

よろしくお願いします。

4

3 に答える 3

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 に答える