【问题标题】:Symfony2 multiple relationships between two entitiesSymfony2 两个实体之间的多重关系
【发布时间】:2012-07-23 19:03:48
【问题描述】:

我有两个实体:Product 和 ProductAttachment(一个文件实体)

一个产品有一张主照片、一个图片列表和一个文档列表。

我的想法是在 Product 和 ProductAttachment 之间建立树关系,所以我在 Product 中有三个属性:

  • $main_photo : OneToOne
  • $pictures : 一对多
  • $attachments : OneToMany

产品附件具有以下属性:

  • $name
  • $路径
  • $文件
  • $product : ManytoOne
  • $type : 附件类型(主照片、图片、文档)

我有一些问题,但在提出具体问题之前,我想知道这是否是一个好方法。

是否存在另一种处理文件的简单方法? 我在 knpbundles 中尝试了一些上传包,但没有成功(它们不适合我的需要)

提前谢谢你!

【问题讨论】:

    标签: php symfony doctrine


    【解决方案1】:

    编辑:重新阅读您的问题后,关于您的人际关系,您实际上需要 ManyToOne(因为您可以拥有许多附加一张主图的产品) ManyToMany(许多产品+许多图片) 多对多(多产品+多附件)

    然后你会得到逆数为 OneToMany、ManyToMany 和 ManyToMany。

    也可以在一个关系中同时包含图片和附件,并在文件中包含类型标识符,这完全取决于您。

    结束编辑

    您完成它的方式将起作用,通常当我处理数据库结构几乎保持不变的文件时。产品附件(或文件)可能有一些额外的字段指示它的存储位置(FTP、S3 等),但除此之外。

    通常,当我处理要上传的文件时,我会使用像http://www.plupload.com 这样的脚本,它实际上会将图像发布到您选择的页面。这真的很好,因为它会使用 HTML5,如果用户不支持该上传器,它会回退到各种其他上传器类型。

    当上传者向控制器发送响应时,它会发送文件,通常我有一个路由设置,可以让我指定上传目录,所以我会指向上传者说http://site.com/upload/upload-folder1

    然后您让控制器保存文件,并返回包含文件位置的响应。然后,您使用 javascript 将文件位置放入隐藏的表单字段 productAttachment.path(例如)中,就是这样。

    我也尝试了上传包,但它们相当复杂,似乎缺少我确切需要的东西。

    【讨论】:

    • 您好,感谢您的回复。第一个问题:在 ProductAttachment 中,我不知道在关系的 inversedBy 子句中放入什么,因为 Product 中有三个属性(main_photo、图片、文档):@ORM\ManyToOne(targetEntity="Product", inversedBy="? ??”)
    • 我重新编辑了我的主要帖子以反映在重新阅读您的问题后。
    • 谢谢,顺便说一句,我找到了使用 DiscriminatorMap 语法的正确方法。一个带有 DiscriminatorMap 的 MappedSuperclass 和两个扩展它的类(ProductPicture 和 ProductDocument),并有两个不同的 $product 定义:@ORM\ManyToOne(targetEntity="Product", inversedBy="picture") 和 @ORM\ManyToOne(targetEntity= "产品", inversedBy="documents")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    相关资源
    最近更新 更多