教义 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 填充文档的故事集合)

使用排序和分页填充或聚合 2 个集合

EJS:如何在 EJS 文件中呈现来自猫鼬的两个或多个填充集合

填充超过 5 万个标记时,Google 地图未加载或卡住

在 mongoose 中使用查找填充一个集合

LibreOffice Base 表单:填充表格或网格控件未绑定到数据源