首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理论2.1.4/2.1.5未被承认的领域试图通过增加一个字段来实现多到多

理论2.1.4/2.1.5未被承认的领域试图通过增加一个字段来实现多到多
EN

Stack Overflow用户
提问于 2013-01-22 22:07:58
回答 1查看 4.3K关注 0票数 1

我正试图用理论来解决我的问题,并用一个额外的字段来实现一个多对多的关联。

更详细地说-看起来是这样的:

Person - Person_Project -项目

  • 一个人可以是多个项目的一部分。
  • 几个人可以是一个项目的一部分
  • 人员具有特定于项目的角色

下面的设置似乎可以很好地工作:

  • 3个原则实体
  • Person -> OneToMany -> Person_Project
  • -> OneToMany -> Person_Project项目

这些协会都是双向的,配置如下:

在Person.php中:

代码语言:javascript
复制
/**
 * @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中:

代码语言:javascript
复制
/**
 * @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中:

代码语言:javascript
复制
/**
 * @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对象,尝试获取分配给这个人的任何项目,然后尝试访问该项目的任何属性,就会遇到以下错误:

代码语言:javascript
复制
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就会将对象与数据挂钩并初始化,但它会遇到前一个错误。

有人能帮我一下吗?

如果需要进一步的输出/信息,请随时询问。

谢谢你帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-05 13:26:41

这个问题是由以下错误引起的:我们的数据库包含大写的列名,因此Doctrine的BasicEntityPersister中的第1591行找不到一个名为"Projektkennung“的主键,因为它实际上被称为"projektkennung”。

您应该始终输入列名区分大小写!其他一切都正常工作,只有深入的调试才能帮助解决问题。

谢谢@meze帮我:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14468954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档