2

私の状況: 一緒にリンクされた複数のモデルに基づくフォームがあります。バックグラウンドでは、画像をアップロードしてリアルタイムでテキストエリアに表示する特定のコントローラーへのajax呼び出しに基づいて、画像を保存するためのルーチンがあります。私の問題は、最初にレコードを保存する必要があるときに適用されます。これは、ajax ルーチンが image を関連付けるためにレコードの ID を知る必要があるためですが、これは save() が呼び出された後にのみ作成されます。モデルを保存する前に ID を取得する方法はありますか? または他の回避策

みんなに前もって感謝します

ルディ

4

4 に答える 4

3

@RichardAtHome はこれについて良い情報を提供してくれると思います。検討したい 3 番目のソリューションを追加します。

そのモデルの主キーには汎用一意識別子 ( UUID ) を使用します。CakePHP は、Stringユーティリティを介してそれらを生成する方法を提供します。したがって、ページがロードされたときにIDを生成し、String::uuid()それをajaxリクエストの一部として送信します。

于 2013-02-06T15:11:40.143 に答える
2

いくつかの解決策:

  1. ワークフローを変更して、メイン モデルが保存された (そして ID がある) 場合にのみ画像をメイン モデルにリンクできるようにします。

  2. メイン モデルが作成されるまで、画像をデータベースに保存しないでください。それらをセッションに保存するか、ユーザーがフィールドを追加するたびにフォームの最後にフィールドを追加し続けることができます。

于 2013-02-06T14:19:10.847 に答える
2

オプション1:

INT の代わりに UUID を使用してみてください。そうすれば、CakePHP を使用して ID を生成できます: String::uuid();.

作成した後、id フィールドにデータを入力すると、アイテムがその ID で保存されます。

銀行のソフトウェアや重要なことをしている場合、その一意性に依存するかどうかはわかりませんが、重複する可能性は 10 億分の 1 であり、通常の Web サイト/ソフトウェアの場合、それで十分なようです.

オプション 2:

私たちの多くのプロジェクトでは、タイトル フィールドだけの非常にシンプルな「モノの作成」ページを用意すると便利であることがわかりました。保存すると、すぐにより詳細な「編集」ページに移動します。ファイルをアップロードしたり、追加のデータを保存したりできます...など。pg1、pg2とほとんど同じです。そうすれば、ファイルだけでなく、他の動的な ajax 駆動型データにも、操作する ID が付与されます。

于 2013-02-06T15:05:59.580 に答える
0

ID は CakePhp ではなくデータベースによって設定され、ID はデータベースが ID フィールドを自動インクリメントした後にのみ知ることができるため、おそらくそうではありません...

フローがどのようになっているのかわかりませんが、コントローラーがページを取得したとき ($this->data が空のとき) に、すべての関連付けなしでダミー/空の行をデータベースに保存できると思います。データベースの空の行には、「12、NULL、NULL、NULL、NULL、NULL、...」のような ID があることがわかります。次に、そのダミー レコードの ID を保存できます (または $this->set("id", $id) を実行して、ビューに渡し、ajax 呼び出しで使用します)。ページの POST の後、ID を使用して他のすべての情報をダミー行に保存したり、何かが失敗したりユーザーが移動したりしたときにデータベースからダミー行を削除したりできます...

于 2013-02-06T14:19:19.090 に答える