【发布时间】:2014-03-17 20:37:27
【问题描述】:
我目前正在处理 Flow3(Doctrine)中“Project”和“Person”之间的第一个多对多关系,并希望从两个控制器中添加、获取和删除元素。
项目声明:
class Project {
// ...
/**
* @var \Doctrine\Common\Collections\Collection</*...*/\Person>
* @ORM\ManyToMany(targetEntity="/*...*/\Person", mappedBy="projects")
*/
protected $persons;
// ...
}
个人声明:
class Person {
// ...
/**
* @var \Doctrine\Common\Collections\Collection</*...*/\Project>
* @ORM\ManyToMany(targetEntity="/*...*/\Project", inversedBy="persons")
*/
protected $projects;
// ...
}
但我只能在“人”(倒置)一侧添加/删除对象。至少我可以从双方得到对象。我是否真的必须在“项目”端使用“人员”对象构建解决方法,还是我错过了一个简单的解决方案?
这里是projectController的sn-p代码,不起作用:
public function addpersonAction() {
$param = $this->request->getArgument('project');
$project = $this->projectRepository->findByIdentifier($param['__identity']);
$selectedPersons = $this->request->getArgument('selPersons');
foreach($selectedPersons as $person)
{
if( strlen($person['__identity']) > 0 )
{
$project->addPerson($this->personRepository->findByIdentifier($person['__identity']));
}
}
$this->projectRepository->update($project);
//...
}
以及Project中的addPerson()函数:
public function addPerson(\DS\Datenbank\Domain\Model\Person $person) {
if( !$this->persons->contains($person) )
$this->persons->add($person);
}
【问题讨论】:
-
此操作是由 GET 请求还是由 POST 请求调用的?数据只会在 POST/SAVE/DELETE 请求中自动保存,而不会在 GET 请求中保存。您必须在 GET 请求调用的操作中手动保存数据。
-
整个代码有点笨拙,并且包含许多不必要的东西,这使得它更加复杂;但是,您的问题还存在吗?
标签: doctrine-orm doctrine typo3 entity-relationship typo3-flow