質問

一度に複数の関連付けを作成していますが、保存に関していくつかの問題があります。

次のコードがあります:

<?php
foreach($userData as $user) {
    $data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
    $this->User->save($data);
}
?>

いつも同じ問題に遭遇しますが、さまざまな方法でデータ配列のフォーマットを試しました。新しいエントリが挿入されると、以前のエントリが移動されるか、現在のエントリが更新されます。

トリガーするにはビヘイビアが必要ですが、次のものを使用できます。

$this->User->SiteUser->save($data);

編集:$ this-&gt; User-&gt; create();あまり役に立たないようです。

役に立ちましたか?

解決

IRCは、一意キーを false に設定すると、すべてが正しく保存できるようになり、問題の解決に役立ちました。

//In the user model
var $hasAndBelongsToMany = array(
  'Site' => array(
    'className' => 'Site',
    'unique' => false
  )
);

他のヒント

新しい save()の前に、おそらく両方のモデルで id をリセットしてみてください:

$this->User->id = null;

Cakeは、設定された id に基づいてエントリを更新または挿入するかどうかを決定し、 save() id を自動的に設定します。 create()がなぜこれを処理しないのかわからない。

また、HABTMデータを保存する場合は、 save()の代わりに saveAll()を使用する必要があります。 この質問も参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top