2

Webプロジェクトで新しい契約を作成するオプションがあります。

新しい契約の作成は、次のドキュメントで構成されています(フランス語に注意してください)。

  • Coordonnéesクライアント
  • FicheDécouverte
  • 対照
  • 分類クライアント
  • Fiche suiveuse
  • Plan de mise en place
  • CCI
  • Enquêtefinancière

    保存ボタン

したがって、ユーザーがこれらのドキュメントの1つをクリックし、すべてのフィールドに入力してこの画面に戻ることができるメインの作成ページがあります。現時点での私の解決策は、PHPセッションに大きなオブジェクト(すべてのドキュメントデータを格納する)を格納し、ユーザーが行う各変更をそれに追加することです。

たとえば、ユーザーが最初のドキュメントに移動し、何かを書き込んでからメインパネルに戻ると、データはセッションに保存されます。彼がクリックするとSAVE BUTTON、セッションのすべてが複雑なデータベーススキーマに保存されます。

コントラクトが不完全なときに[保存]をクリックすると(少なくとも1つのドキュメントが不足している場合、大きなオブジェクトはMongoDBに保存され、後で復元されます。

  1. 私がすることはすべて良い習慣だと考えられていますか?
  2. 私はセッションで休むべきではありませんか?(今のところ問題はありません。オブジェクトサイズは約5kbです)
  3. 中間データの保存にもMongoを使用する必要がありますか?

追伸:これは内部プロジェクトであるため、セキュリティが問題になることはありません。問題は、データの一貫性と品質です。

また、カスタムオブジェクトは、キャストせずにセッションから保存および復元されることに注意してください。モンゴに関しては、すべてのコンポーネントをキャストする必要があります。

4

1 に答える 1

1

私には、非リレーショナル データベースを使用することにほとんど慣れていないように思えます。私が見つけた解決策は非常に簡単でした:

以下のように MongoDB に挿入し、データベースから選択するときに複雑なキャストを使用する代わりに、オブジェクトをシリアル化しました

前:

   //convert big object to array to store in MongoDB
    $this->mongo_db->insert('contrats', (array)$contrat); 

後:

   $data=Array();
   $data['identifier']='123' //set an id so I can query by
   $data['contract']=serialize($contract);
   $this->mongo_db->insert('contrats',$data);

データの回復は非常に簡単です -unserialize($row->contract)必要なオブジェクトを返します。

このようにして、一時データを Mongo に保存するのは簡単になります。ID を設定してコントラクトを見つけ、大きなオブジェクトをシリアル化するだけです。

于 2012-08-24T07:53:47.710 に答える