我有很多对多的关系。 在实体“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”?
答案 0 :(得分:0)
如果您总是希望订购您的收藏品,那么您可以将OrderBy属性添加到您的Doctrine映射中:
/**
* @ManyToMany(targetEntity="Attivita")
* @OrderBy({"position" = "ASC"})
**/
private $attivitas;
另一种方法是向您的Progetti实体添加getAttivitaOrdered方法:
class Progetti
getAttivitaOrdered() // return ordered list
->add('attivitaOrdered', CollectionType::class ...
发布时不确定是否需要setAttivitaOrdered方法。
你的问题实际上有点令人困惑。向连接表添加属性意味着您需要使用OneToMany和ManyToOne关系而不是ManyToMany。因此需要进行一些调整。