我正在尝试使用 Doctrine 解决我的问题并使用附加字段实现多对多关联。
更详细 - 它看起来像这样:
人员 - Person_Project - 项目
- 一个人可以参与多个项目
- 几个人可以成为一个项目的一部分
- 人员具有项目特定的角色
这似乎与以下设置正常工作:
- 3 教义实体
- 人 -> OneToMany -> Person_Project
- 项目 -> OneToMany -> Person_Project
这些关联都是双向的,配置如下:
在 Person.php 中:
/**
* @Id @GeneratedValue @Column(name="PersonenNr", type="integer")
*/
protected $id;
/**
* @OneToMany(targetEntity="PersonProject", mappedBy="person", cascade={"PERSIST"})
*/
protected $personProjects = null;
public function __construct() {
$this->personProjects = new ArrayCollection();
}
public function getProjects() {
$projects = new ArrayCollection();
foreach ($this->personProjects as $pp) {
$projects->add($pp->project);
}
return $projects;
}
在 Project.php 中:
/**
* @Id @Column(name="ProjectId", type="string")
*/
protected $id;
/**
* @OneToMany(targetEntity="PersonProject", mappedBy="project", cascade={"PERSIST"})
*/
protected $personProjects = null;
public function __construct() {
$this->personProjects = new ArrayCollection();
}
在 PersonProject.php 中:
/**
* @Id
* @ManyToOne(targetEntity="Person", inversedBy="personProjects")
* @JoinColumn(name="PersonId", referencedColumnName="PersonId")
*/
protected $person = null;
/**
* @Id
* @ManyToOne(targetEntity="Project", inversedBy="personProjects")
* @JoinColumn(name="ProjectId", referencedColumnName="ProjectId")
*/
protected $project = null;
现在我的问题从使用它们开始。从数据库中检索到 Person-Object 后,尝试获取分配此人的任何项目,然后尝试访问该项目的任何属性,遇到以下错误:
Error in File: /usr/share/php/Doctrine/ORM/ORMException.php
Line: 60
Text: Unrecognized field:
Trace:
#0 /usr/share/php/Doctrine/ORM/Persisters/BasicEntityPersister.php(1231): Doctrine\ORM\ORMException::unrecognizedField('')
#1 /usr/share/php/Doctrine/ORM/Persisters/BasicEntityPersister.php(853): Doctrine\ORM\Persisters\BasicEntityPersister->_getSelectConditionSQL(Array, NULL)
#2 /usr/share/php/Doctrine/ORM/Persisters/BasicEntityPersister.php(568): Doctrine\ORM\Persisters\BasicEntityPersister->_getSelectEntitiesSQL(Array, NULL, 0)
#3 /tmp/DBProjectProxy.php(31): Doctrine\ORM\Persisters\BasicEntityPersister->load(Array, Object(DoctrineProxies\DBProjectProxy))
#4 /tmp/DBProjectProxy.php(41): DoctrineProxies\DBProjectProxy->__load()
#5 /home/[...]/project-data.html (12): DoctrineProxies\DBProjectProxy->getName()
... (just our internal call-hierarchy)
{main}
在调试时,我可以看到检索到了正确的 Person_Project-Entities,但是所有项目都被 DoctrineProxies 替换了。一旦我尝试使用它们的任何属性,Doctrine 就会使用数据挂钩并初始化对象,但它会遇到前一个错误。
有人可以帮我吗?
如果需要任何进一步的输出/信息,请随时询问。
感谢帮助!