3

同時に作成されているmyModel一連のサブモデルと1対多の関係で作成している新しいモデルがあります。mySubModel

モデルを保存しようとすると:

<cfset myModel=model("myModel").new(params.mymodel)>
<cfset myModel.save()>

モデルパーツのみが保存され、params.myModel.mySubModels内のアイテムは作成されません。モデルにはリレーション設定があり、適切なインクルードを使用して同じ形式でデータを引き出すことができmyModelます。

各モデルを個別に保存することもできますが、問題が発生したり、cfwheelsがすでにこれを処理できる場合は、コードの針行を作成したりすることが心配です。最初のモデルを保存してから追加のサブモデルを保存する必要があります。エラーが発生した場合は、データベースに既に書き込まれているモデルとその他のサブモデルを削除します。

4

3 に答える 3

3

メイン オブジェクトがサブオブジェクトに関連付けられている限りhasManyネストされたプロパティは非常に貴重です。

メインモデルでは:

function init() {
    hasMany("subModels");
    nestedProperties("subModels");
}

次に、save()コントローラーの実行で を呼び出すと、親オブジェクトとそれに関連付けられているすべての子が保存されます。

function create() {
    myModel = model("myModel").new(params.myModel);

    // This call to `save()` saves associated children represented in `params.myModel` too
    if (myModel.save()) {
        redirectTo(route="myRoute", success="The model was saved successfully.");
    }
    else {
        flashInsert(error="There was an error saving the model.");
        renderPage(action="new");
    }
}

特定のデータ構造について詳しくコメントしていただければ、フォーム部分についてお手伝いできます。何かを「サブモデル」と呼んでも、この議論はここまでです。

于 2011-12-08T21:05:51.393 に答える
0

init次のように、モデルの で 2 つのメソッドを定義します。

validate(methods="validateChildren");
afterCreate(methods="createChildren");

validateChildren各子モデル(もちろん、対応するモデルで定義されています)の検証を実行します。この目的のためにvalidを使用することを検討してください。データを保存せずに検証を開始します。

次のような構文を使用して、エラーを親モデル レベルに渡します。

addError(property="someproperty", message="Something wrong happened");

次に、エラーがない場合、createChildrenメソッドは必要なすべてのサブモデルを作成し、使用paramsして安全なデフォルトをオーバーライドします。個人的には、外部データに依存することはあまり良い考えではなく、物事を台無しにする可能性があるため、params のループは使用しません。

于 2011-12-08T10:03:04.697 に答える
0

ここのドキュメントを見ています: http://cfwheels.org/docs/1-1/chapter/associations具体的には、「hasMany()」に関連するセクションです。親レコードに基づいて新しい子レコードを作成するための関数がいくつかありますが、一度に複数を作成する関数はありません。せいぜい、これがあなたができることのようです:

<cfset myModel=model("myModel").create(params.mymodel)>

<cfloop array="#params.mymodel.mySubModels#" index="thisSubModel">
  <cfset myModel.createMySubModel(thisSubModel)>
</cfloop>

これはそれほど悪くはないようです。

于 2011-12-08T06:27:43.890 に答える