在FormType中订购具有多对多关系的CollectionType

时间:2016-07-15 11:45:12

标签: symfony-forms symfony

我有很多对多的关系。 在实体“Progetti”我有:

/**
     *
     * @var \Doctrine\Common\Collections\ArrayCollection $attivita
     *
     * @ORM\ManyToMany(targetEntity="Attivita", inversedBy="progetti",cascade={"persist", "remove" })
     * @ORM\JoinTable(name="progetti_attivita",
     *     joinColumns={@ORM\JoinColumn(name="progetti_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="attivita_id", referencedColumnName="id")}

     * )

     */
    protected $attivita;

在实体“Attività”中我有:

/**
     *
     * @var \Doctrine\Common\Collections\ArrayCollection $progetti
     * @ORM\ManyToMany(targetEntity="Progetti", mappedBy="attivita")

     */
    protected $progetti;

确定。 JoinTable“progetti_attivita”有“attivita_id”和“progetti_id”。 现在我在JoinTable“progetti_attivita”中添加了一个新字段,我把它称为“位置”。这是一个整数。

我有ProgettiType表格:

$builder
            ->add('nomeProgetto')
            ->add('descProgetto')
            ->add('noteProgetto')
            ->add('attivita', CollectionType::class, array(
                    'entry_type' => AttivitaType::class,
                    'allow_add' => true,

            ));

确定。 我的表格显示所有“attività”为“progetti”。

我的问题是: 我怎么说Form才能显示“位置”命令的“attivita”?

1 个答案:

答案 0 :(得分:0)

如果您总是希望订购您的收藏品,那么您可以将OrderBy属性添加到您的Doctrine映射中:

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/tutorials/ordered-associations.html

/**
 * @ManyToMany(targetEntity="Attivita")
 * @OrderBy({"position" = "ASC"})
 **/
private $attivitas;

另一种方法是向您的Progetti实体添加getAttivitaOrdered方法:

class Progetti 
    getAttivitaOrdered() // return ordered list

->add('attivitaOrdered', CollectionType::class ...

发布时不确定是否需要setAttivitaOrdered方法。

你的问题实际上有点令人困惑。向连接表添加属性意味着您需要使用OneToMany和ManyToOne关系而不是ManyToMany。因此需要进行一些调整。