我正试图用理论来解决我的问题,并用一个额外的字段来实现一个多对多的关联。
更详细地说-看起来是这样的:
Person - 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;现在我的问题从使用它们开始。一旦我从DB中检索到Person对象,尝试获取分配给这个人的任何项目,然后尝试访问该项目的任何属性,就会遇到以下错误:
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实体,但是所有的项目都被DoctrineProxies替换了。一旦我尝试使用它们的任何属性,Doctrine就会将对象与数据挂钩并初始化,但它会遇到前一个错误。
有人能帮我一下吗?
如果需要进一步的输出/信息,请随时询问。
谢谢你帮忙!
发布于 2013-03-05 13:26:41
这个问题是由以下错误引起的:我们的数据库包含大写的列名,因此Doctrine的BasicEntityPersister中的第1591行找不到一个名为"Projektkennung“的主键,因为它实际上被称为"projektkennung”。
您应该始终输入列名区分大小写!其他一切都正常工作,只有深入的调试才能帮助解决问题。
谢谢@meze帮我:)
https://stackoverflow.com/questions/14468954
复制相似问题