Flow3 - 如何创建简单易用的多对多关系



我目前正在研究 Flow3(学说)中"项目"和"人"之间的第一个多对多关系,并希望从两个控制器中添加、获取和删除元素。

项目申报:

class Project {
 // ...
 /**
  * @var DoctrineCommonCollectionsCollection</*...*/Person>
  * @ORMManyToMany(targetEntity="/*...*/Person", mappedBy="projects")
  */
  protected $persons;
 // ... 
}

人员声明:

class Person {
 // ...
 /**
  * @var DoctrineCommonCollectionsCollection</*...*/Project>
  * @ORMManyToMany(targetEntity="/*...*/Project", inversedBy="persons")
  */
  protected $projects;
 // ...
}

但我只能在"人"(反转)端添加/删除对象。至少我可以从双方获得对象。我真的必须在"项目"端使用"Person"对象构建解决方法,还是我错过了一个简单的解决方案?

这是projectController的代码片段,它不起作用:

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);
    //...
}

以及项目中的 addPerson() 函数:

public function addPerson(DSDatenbankDomainModelPerson $person) {
    if( !$this->persons->contains($person) )
      $this->persons->add($person);
  }

对我来说,这有效。我假设您在两种模型中都有适当的添加方法。顺便说一句:你不需要 "targetEntity" 在 flow 中,它是由上面的 @var 声明自动找到的。

您的数据库是最新的吗?是否刷新了缓存?

我检查了"变通方法"替代方案,它可以工作。所以总结一下我所做的:

=> 不是在项目端添加/删除人员,而是在人员方面添加/删除项目,但在您上面看到的项目中的旧 addpersonAction() 中。

但问题仍然悬而未决:它真的只有这样工作吗,为什么?

相关内容

  • 没有找到相关文章

最新更新