我有两个实体:项目和任务。我可以将此对象实现为Value Object,但我想知道这是否是好方法?任务可能会更改自己的标题或状态,VO应该是不可变的。如何实现这个对象?
我想知道在Project实体中我应该添加addTask方法还是应该通过TaskController添加任务?当Project实体有addTask方法时是否需要TaskController?
答案 0 :(得分:1)
阅读有关Doctrine Associations / Relations的文档: http://symfony.com/doc/current/doctrine/associations.html
它应该解释你需要做什么。
基本上,您的项目实体应该有一个addTask()
方法来添加任务。您的项目将具有任务的ArrayCollection。然后,您可以使用getTask()
方法(创建此方法)来获取任务(如果需要)。
文档提供了很好的示例,因此请先阅读。
编辑#2 根据评论。
所以,似乎你不太了解这篇文章。您可以在每个实体中使用单独的方法来执行与该特定实体相关的所需操作。我不确定你真正想要什么方法。
例如,您在注释中给出了两种方法:changeTask和changeNameTask。
在您的代码中,您可以执行以下操作:
$project = new Project();
$task1 = new Task();
$task1->setName("My Task Name");
... // Do other things with task1
$project->addTask($task1);
$em = $this->getDoctrine()->getManager();
$em->persist($project); // Save to db.
$em->persist($task1);
$em->flush();
// Now let's add a new Task (different name).
$task2 = new Task();
$task2->setName("Another Task");
...
$project->addTask($task2);
// Remove the old Task...
$em->remove($task1);
$em->persist($project); // Save to db.
$em->persist($task2);
$em->flush();
// You can also get the Task if you need it.
$task2 = $project->getTask(); // Presumes that this is an object not an array.
以上应该有意义......