1

私はCakePHPアプリケーションで非常に本質的なデータベースを使用していますが、これまでのところ、マルチモデルのビューとコントローラーは正常に機能しています。外部キーとして他のいくつかのテーブルにある単一のテーブル(Entity)がありますidentity_id

一部のテーブルは1対1の関係(aCompanyは1のようにEntity)であり、一部は1対多(Entity複数のテーブルを持つことができますAddresses)などです。

データベースモデルを変更できない/変更できないので、これが構造です。

私はsaveAll()これらのテーブルに次のような入力名でデータを保存するために使用しています。

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

そして、私のすべてを救うことは、すべての難しい仕事をしている、、BEGIN TRANSACTIONすべてINSERTの、そして最後のCOMMIT...

しかし今、私はEntityCategoryto n関係であるを作成しHABTM、モデル内に完全な関係を作成しました。

それは私save()がそれをするときだけ動作しますが、関係だけです、そしてそれは私が使用するとき(以前と同じように)関係を除いてすべてをHABTM保存します。saveAll()HABTM

私は何かが足りないのですか?これを正しく機能させるにはどうすればよいですか?今日は次のコードを使用しています。

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

saveAll()すべてのデータをいくつかのテーブルに保存し、IDをEntity->id保存save()し、HABTMリレーションを保存しますが、それが正しいかどうか、または構造/モデルを変更した場合に問題が発生する可能性があるかどうかはわかりません。

これはそれを使用するための最良の方法ですか?CakePHP内にその関係を保存する正しい方法はありますか?あなたの経験/知識は私に何を教えてくれますか?

4

2 に答える 2

1

これは、nightlyをダウンロードすると修正されます。

ただし、何かが壊れる可能性があるので注意してください。

于 2008-11-18T09:19:10.223 に答える
0

saveAll() と HABTM の関連付けに関する問題は CakePHP の既知の問題であり、1.2 RC2 の時点では解決されていません。

CakePHP のクックブックによると、関連するモデル データを保存するためのベスト プラクティスは次のとおりです

「関連付けられたモデルを操作する場合、モデル データの保存は常に対応する CakePHP モデルによって行われる必要があることを認識することが重要です。新しい投稿とそれに関連付けられたコメントを保存する場合は、保存中に Post モデルと Comment モデルの両方を使用します。手術。"

ただし、 saveAll() と save() を使用すると機能するはずであり、IMHO はより柔軟で汎用的なソリューションです。

于 2008-09-29T07:14:00.677 に答える