学说2 - 一对多单向

时间:2014-07-21 20:22:21

标签: php symfony doctrine-orm

关于在Doctrine 2中创建一对多单向关系的几个问题:

  1. 是否需要联接表?
  2. docs说“查看此示例”,但我看到的只是生成的架构。任何人都在想一个快速的例子,这样我就能得到正确的注释吗?

4 个答案:

答案 0 :(得分:2)

这表明了一对多关系,用户可以拥有多个报告,一个报告只能属于一个用户。

class User
{
    // ...

    /**
     * @OneToMany(targetEntity="Report", mappedBy="user")
     */
    protected $reports;

    public function __construct()
    {
        $this->reports = new ArrayCollection();
    }

    public function addReport(\Namespace\To\Report $report)
    {
        $this->report[] = $report;
    }

    public function getReports()
    {
        return $this->reports;
    }
}

class Report
{
    // ...

    /**
     * @ManyToOne(targetEntity="User", inversedBy="reports")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;

    public function setUser(\Namespace\To\User $user)
    {
        $this->user = $user;
    }

    public function getUser()
    {
        return $this->user;
    }
}

在这种情况下,要创建报告并将其与用户关联,我们会:

// create a User (or find an existing one)
$user = new User();
// create the Report
$report = new Report();
// add the User to the Report
$report->setUser($user);
// then persist it, etc ...

答案 1 :(得分:2)

您使用的是2.0.x版本的文档。检查this one。你将有这个例子。

所以,是的,您可以避免两个类之一的注释。

答案 2 :(得分:0)

不,不是。试试这个:

class Foo
{
    public function __construct()
    {
        $this->bars = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * @ORM\OneToMany(targetEntity="My\AwesomeBundle\Entity\Bar", mappedBy="foo")
     */
    protected $bars;
}

class Bar
{
    /**
     * @ORM\ManyToOne(targetEntity="My\AwesomeBundle\Entity\Foo", inversedBy="bars")
     */
    protected $foo;
}

答案 3 :(得分:0)

在获取一对多时,这与Doctrine 2 + Zend Framework 2.5配合得很好 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional

在我的情况下,我必须检索带有文档的产品(每个产品至少5份文件)

ArrayCollection本身就做得很好。

在查看器中,您只需要访问对象Product,然后再次使用$ product-> getDoc()即可。