教义 2 集合未连接或填充
Posted
技术标签:
【中文标题】教义 2 集合未连接或填充【英文标题】:Doctrine 2 Collection not connected or filled 【发布时间】:2013-06-11 09:16:14 【问题描述】:我有一个原则设置,我不能使用集合的多方面。
使用的对象: 用户.php:
class User extends \App\Entity
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
/**
* @ManyToOne(targetEntity="Company", inversedBy="users")
*/
private $company;
public function getCompany()
return $this->company;
public function setCompany($company)
$this->company = $company;
公司.php:
class Company extends \App\Entity
/**
* @Id @Column(type="integer", nullable=false)
* @GeneratedValue
*/
private $id;
/**
* @OneToMany(targetEntity="User", mappedBy="company")
*/
private $users;
public function __construct()
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
public function getUsers()
return $this->users;
当我创建关系时似乎正在工作。没有错误。然后我尝试了以下方法:
$company = $this->em->getRepository('App\Entity\Company')->findOneByName("Walmart");
$user = $this->em->getRepository('App\Entity\User')->findOneByName("Niek");
$user->setCompany($company);
$company2 = $this->em->getRepository('App\Entity\Company')->findOneByName("Ford");
$user2 = $this->em->getRepository('App\Entity\User')->findOneByName("Henk");
$company2->getUsers()->add($user2);
$this->em->flush();
当我检查该公司设置的第一个用户的数据库时。关系就在那里。秒数不会持续。当我这样做时:
print_r(\Doctrine\Common\Util\Debug::dump($company->getUsers(),$doctrineDepth));
print_r(\Doctrine\Common\Util\Debug::dump($company->getUsers2(),$doctrineDepth));
我得到 2 个空数组。
所以看起来数组没有连接。它只在 OneToMany 或 ManyToOne 关系上表现得像这样。得到了一个 ManyToMany 并且在同一个项目中完美运行
有什么想法吗?
【问题讨论】:
【参考方案1】:您仍然需要将关系的双方设置为一对多或多对一的关系:
$company2 = $this->em->getRepository('App\Entity\Company')->findOneByName("Ford");
$user2 = $this->em->getRepository('App\Entity\User')->findOneByName("Henk");
$company2->getUsers()->add($user2);
$user2->setCompany($company2);
$this->em->flush();
你的多对多工作的原因是因为你不需要设置关系的双方。
【讨论】:
这确实会拯救公司。但这并没有解决我的 $company->getUsers() 一直为空的问题。这会破坏双向关系的目的。 尝试删除您的extends \App\Entity
,因为 Doctrine 将尝试创建一个代理类来扩展您的实体并实现 \Doctrine\ORM\Proxy\Proxy
以加载关系。 PHP 不支持多重继承。或者,制作您的查询以确保它包含您尝试和获取的所有关系。
代理类没有生成?所有的设置都在那里。并且有一个生成的文件。删除它,以便它可以重新生成。但是什么也没发生。以上是关于教义 2 集合未连接或填充的主要内容,如果未能解决你的问题,请参考以下文章
集合未保存在 mongodb 中(来自 mongoose 填充文档的故事集合)