Symfony2和Doctrine2产品&管理图像映射效率不高

时间:2012-01-14 06:30:43

标签: php orm mapping symfony doctrine-orm

在我的Symfony2应用程序中,我应该有一个应该有多个图像的产品,但只有一个应该是主图像,它将在一个页面上识别20或某些产品之间的产品。当用户打开特定产品时,将显示其余图像,并显示有关它的所有产品详细信息,包括其余图像。基本上大多数产品网站的工作方式。

我将其映射为:

/**
 * @ORM\Entity()
 * @ORM\Table(name="product")
 * @ORM\HasLifecycleCallbacks()
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    protected $title;

    /**
     * @ORM\ManyToMany(targetEntity="Productimage")
     * @ORM\JoinTable(name="productimage_map",
     *      joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="image_id", referencedColumnName="id")}
     *      )
     */
    protected $images;    

    public function __construct()
    {
        $this->images = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

产品图片实体:

/**
 * @ORM\Entity(repositoryClass="Webmuch\ShopBundle\Repository\ProductimageRepository")
 * @ORM\Table(name="productimage")
 * @ORM\HasLifecycleCallbacks()
 */
class Productimage
{
   /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

   /**
    * @ORM\Column(type="string", length=255)
    */
    protected $imagePath;

   /**
    * @ORM\Column(type="datetime")
    */
    protected $created;

   /**
    * @ORM\Column(type="boolean")
    */      
    protected $mainImage;
}

它可以正常工作,但是当我创建一个用于创建新项目的表单时,它会显示一个包含Itemimage表的所有行的多重选择。如何创建一个系统,我可以从项目创建表单本身上传图像,而不是从包含1000个图像的多选表单元素中选择要与项目一起映射的图像。

我还附上了我想要解释的图像。目前只有2张图片,但只有几百种产品会成千上万。

我希望我已经设法解释了问题所在。这对我来说非常困惑。请帮帮我。

此外,多个选择元素显示ID,我希望它们是标题。知道我怎么能这样做吗?

谢谢!我感谢所有的帮助。

cut out from the rendered form

1 个答案:

答案 0 :(得分:1)

您应该直接添加引用图像表的mainImage属性,而不是现在使用的布尔标志。

您可以通过为表单类型提供'property' => 'title'选项来指定您希望显示每个图像的标题。