关于在Doctrine 2中创建一对多单向关系的几个问题:
答案 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()即可。