CakePHPでHABTMを使用して保存する
-
05-07-2019 - |
質問
一度に複数の関連付けを作成していますが、保存に関していくつかの問題があります。
次のコードがあります:
<?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()
を使用する必要があります。 この質問も参照してください。
所属していません StackOverflow