Symfony2和Doctrine - ManyToOne

时间:2015-02-10 22:52:20

标签: symfony doctrine-orm doctrine

我试图了解Symfony2,但有些东西对我来说没有意义。我反过来设计了一个现有的数据库来生成我的实体,所以也许就是这个问题。

我有一个名为availability_alert的表,没什么特别的,一些字段包括一个id(这是主键)。此表没有任何其他链接。

然后我有一个名为booking_class的第二个表,再一点没什么特别的,但它确实有$ availabilityAlert字段链接到availability_alerts表id。

从本质上讲,可用性警报可以有一个或多个预订类。

现在在我的预订类实体中,我有链接

/**
 * @var \AlertBundle\Entity\AvailabilityAlert
 *
 * @ORM\ManyToOne(targetEntity="AlertBundle\Entity\AvailabilityAlert")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="availability_alert_id", referencedColumnName="id")
 * })
 */
private $availabilityAlert;

所以这一切看起来都不错。它的制定者虽然如此出现

public function setAvailabilityAlert(\AlertBundle\Entity\AvailabilityAlert $availabilityAlert = null)
{
    $this->availabilityAlert = $availabilityAlert;

    return $this;
}

那么似乎将AvailabilityAlert对象作为参数,而不是AvailabilityAlert id?

所以有了上述内容,我假设在我的控制器中做这样的事情是行不通的?

$alert = new AvailabilityAlert();

$bookingClass = new BookingClass();
$bookingClass->setAvailabilityAlert($alert->getId());

有人可以就这里的事情是否正确,或者我是否应该做其他事情给我一些建议?基本上,AvailabilityAlert应该是一个静态表,其他表链接到此。

任何建议表示赞赏。

由于

2 个答案:

答案 0 :(得分:0)

是的,这是正确的。

在Doctrine世界中,当涉及实体之间的关系时,您正在处理对象,而不是整数或字符串。

您可以在此处阅读有关Doctrine 2关系的更多信息:http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations

答案 1 :(得分:0)

那是对的。你不使用整数,字符串。这是因为关系是在实体注释中给出的,而Doctrine使用它们来确定用于引用另一个对象的确切用途。这甚至可以让您更改对象引用自身的方式 - 例如,您将ID更改为AvailabilityAlert类中的复合主键,并且除了注释外,您的代码不会发生太大变化。