-1

多くの 1 対 1 のリレーションシップがあり、ユーザーがこれらすべてのデータを入力できるフォームがある場合、入力されたレコードのみが子テーブルに保存されるようにするにはどうすればよいですか。たとえば、ユーザーは住所と住居の住所を持つことができます。モデルは hasOne および belongsTo として設定されます。ユーザー データの入力を許可するフォームを表示する場合、(saveAll を使用して) postalAddress または ResidencealAddress の関連レコードがこれらのフィールドに入力されている場合にのみ作成されるようにするにはどうすればよいですか。

4

1 に答える 1

0

まず、あなたの関係が正しく設定されていないと思います。aUserが郵便住所と住居住所を持つことができる場合、それは 2 つの住所である可能性があります。これは次のことを意味します。

UserhasManyAddress
Addressが所属するUser

モデルでこれらの関係を作成する必要があります。関係の詳細

次に、フィールドをフォームに追加する必要があります。このステップを完了したと仮定します。

フィールド内のデータを強制するために、いくつかの検証ルールを作成する必要があります。これらは、検証するモデルのフィールドごとになります。Userこれは、モデル内の の検証ルールと、Userモデル内の住所検証が必要になることを意味しますAddress

保存する前にデータ配列からデータを削除したい場合は、モデル コールバック関数を使用してこれを実現できます。をご覧になることをお勧めしますbeforeSave()beforeSave について読む

このコールバックを使用すると、 を使用してデータを調べて、$this->data['User']['Address']['field']空であるかどうかを確認できます。空である場合は、配列から削除できます。

于 2013-05-23T11:29:03.667 に答える