1

私はbelongsToデータで行ったように関連データを作成して保存したいと思っていました-関連データはその場で作成され、外部IDも生成され、トランザクションが構築されたsaveAllまたはsaveAssocatedを1回呼び出すだけでその場で保存されます-の。

しかし、これはhasMany関係のデータには当てはまらないようです。例としてユーザーとコメントを取り上げます。コメントの外部キーはuser_idです。

ユーザーに単一のsaveAll($ data)を使用してユーザー$dataを保存できないようです

Array(
    'name' => 'Jack',
    'email' => 'jack@abc.com',
    'Comment' => array(
         array(
            'title' => 'I like this article.'
         )
    )
)

私はいくつかのドキュメントを読みました。コメントデータを正しく作成するための外部キーとしてuser_idを言及する必要があるようです。

その場合、作成するまでユーザーIDがないので、SAVEを2回実行するようにコーディングする必要があるようです。

私は本当に何かが欠けていると思います。これを行うにはCAKEの方法があるはずです。

4

1 に答える 1

5

これは、規則に従い、それに応じてデータをフォーマットする限り、Cakeによって自動的に実行されます。アソシエーションの場合hasMany、メインモデルデータと関連モデルデータは、次のように同じレベルの文字列キーに設定する必要があります。

array
(
    'User' => array(),
    'Comment' => array()
)

また、注意してください

saveAll関数は、saveManyメソッドとsaveAssociatedメソッドの単なるラッパーです。データを検査し、実行する保存の種類を決定します。データが数値のインデックス付き配列でフォーマットされている場合は、saveManyが呼び出されます。それ以外の場合は、saveAssociatedが使用されます。

この関数は、前の2つと同じオプションを受け取り、通常、下位互換性のある関数です。場合に応じて、saveManyまたはsaveAssociatedのいずれかを使用することをお勧めします。

どちらでもかまいません。

簡単に言うと、モデルデータは文字列キーで区切り、インデックスを付ける必要があります。これは、find()呼び出しで返される形式と基本的に同じです。そうすれば、Cakeは関連データを保存する必要があることを認識し、Commentレコードの外部キーを自動的に挿入します。

array
(
    'User' => array
    (
        'name' => 'Jack',
        'email' => 'jack@abc.com'
    ),
    'Comment' => array
    (
        array
        (
            'title' => 'I like this article.'
        )
    )
)

も参照してください

于 2012-10-29T08:39:15.413 に答える