在阅读了Doctrine参考资料和Symfony教程之后,我开始将它集成到一个项目中。我遇到了一个我认为可以解决问题的问题:
我希望Libraries
有许多Collections
,我认为这是一个'ManytoOne'关系,因为Collection会保留外键。
一些片段:
在图书馆:
/**
*
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Collection", mappedBy="library")
*/
private $collections;
收藏:
/**
* @var Library
*
* @ORM\ManyToOne(targetEntity="Library", inversedBy="collections")
* @ORM\JoinColumn(name="library_id", referencedColumnName="id")
*/
private $library;
由于大部分注释都是默认的,因此可以省略,这是一个非常基本的设置。
示例控制器代码:
$library = new Library();
$library->setName("Holiday");
$library->setDescription("Our holiday photos");
$collection = new Collection();
$collection->setName("Spain 2011");
$collection->setDescription("Peniscola");
$library->addCollection($collection);
$em=$this->getDoctrine()->getManager();
$em->persist($collection);
$em->persist($library);
$em->flush();
上面的代码不会在library_id
表格中设置Collection
列,我认为这是因为Library
不是所有者。
$library = new Library();
$library->setName("Holiday");
$library->setDescription("Our holiday photos");
$collection = new Collection();
$collection->setName("Spain 2011");
$collection->setDescription("Peniscola");
$collection->setLibrary($library); <--- DIFFERENCE HERE
$em = $this->getDoctrine()->getManager();
$em->persist($collection);
$em->persist($library);
$em->flush();
作品。但我希望能够使用库添加和删除方法。
更改这些添加和删除方法来调用setLibrary
方法是否常见?
public function addCollection(\MediaBox\AppBundle\Entity\Collection $collections)
{
$this->collections[] = $collections;
$collections->setLibrary($this);
return $this;
}
和
public function removeCollection(\MediaBox\AppBundle\Entity\Collection $collections)
{
$this->collections->removeElement($collections);
$collections->setLibrary(null);
}
我认为这不是很好。
一般来说,它是学说或ORM的最佳实践吗?
亲切的问候和提前谢谢!
答案 0 :(得分:0)