Doctrine 2 Collection未连接或填充

时间:2013-06-11 09:16:14

标签: php zend-framework orm doctrine-orm

我有一个学说设置,我不能使用收藏的许多方面。

使用的对象: user.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;
    }
}

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 个答案:

答案 0 :(得分:0)

您仍然需要将关系的两边都设置为一对多或多对一关系:

$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();

你的多对多作品的原因是因为你不需要设置关系的双方。