0

Product と ProductAttachment (ファイル エンティティ) の 2 つのエンティティがあります。

製品には、メインの写真、写真のリスト、ドキュメントのリストがあります。

私の考えは、Product と ProductAttachment の間にツリー関係を持たせることなので、Product に 3 つの属性があります。

  • $main_photo : ワンツーワン
  • $pictures : OneToMany
  • $attachments : OneToMany

製品の添付ファイルには、次の属性があります。

  • $name
  • $パス
  • $ファイル
  • $product : 多対一
  • $type : 添付ファイルの種類 (メインの写真、写真、ドキュメント)

いくつか問題がありますが、特定の質問をする前に、それが良いアプローチかどうか知りたいです。

ファイルを操作する別の簡単な方法はありますか? knpbundles でいくつかのアップロード バンドルを試してみましたが、うまくいきませんでした (必要なものに適合しません)。

前もって感謝します!

4

1 に答える 1

0

編集:あなたの関係を再読した後、あなたは実際にManyToOneが必要になります(1つのメイン画像が添付された多くの製品を持つことができるため)ManyToMany(多くの製品+多くの写真)ManyToMany(多くの製品+多くの添付ファイル)

次に、OneToMany、ManyToMany、ManyToManyの逆数があります。

写真と添付ファイルの両方を1つの関係にまとめ、ファイルにタイプIDを設定することも可能ですが、それは実際にはあなた次第です。

編集終了

あなたがそれをした方法は、一般的に私がデータベース構造がほとんど同じままであるファイルを扱っているとき、うまくいくでしょう。製品の添付ファイル(またはファイル)には、保存場所(FTP、S3など)を示す追加のフィールドがいくつかある場合がありますが、それは同じです。

通常、アップロードするファイルを操作するときは、 http: //www.plupload.comのようなスクリプトを使用して、選択したページに実際に画像を投稿します。HTML5を使用し、ユーザーがそのアップローダーをサポートしている場合は、他のさまざまなアップローダータイプにフォールバックするので、非常に便利です。

アップローダーがコントローラーに応答を送信すると、ファイルが送信されます。通常、アップロードディレクトリを指定できるルート設定があるため、アップローダーにhttp://site.com/upload/uploadと言うように指示します。 -folder1

次に、コントローラーにファイルを保存させ、ファイルの場所を示す応答を送り返します。次に、javascriptを使用して、ファイルの場所を非表示のフォームフィールドproductAttachment.path(たとえば)に配置します。これでほぼ完了です。

アップロードバンドルも試しましたが、かなり複雑で、必要なものが不足しているようでした。

于 2012-07-25T13:21:13.400 に答える