2015-02-10 64 views
0

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

我有一个名为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; 

所以这一切看起来OK。它的制定者虽然出来了,像这样

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

    return $this; 
} 

所以,似乎采取A​​vailabilityAlert对象作为参数,而不是AvailabilityAlert ID?

因此,与上述,我假设在我的控制器做这样的事情不会工作?

$alert = new AvailabilityAlert(); 

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

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

任何意见赞赏。

谢谢

+0

也许阅读说明书:http://symfony.com/doc/current/book/doctrine.html? Doctrine 2是一个对象关系管理器。你需要花一些时间了解它的功能。另外,您应该回答问题,而不是仅仅提出新问题。更好的机会让人来帮助你。 – Cerad 2015-02-10 23:28:54

回答

0

这是正确的。你不使用整数,字符串。这是因为这些关系是在实体注释中给出的,而Doctrine使用它们来找出恰恰用来引用另一个对象的东西。这甚至可以让你改变对象的引用方式 - 例如,你可以将ID更改为AvailabilityAlert类中的复合主键,除了注释之外,你的代码不会有太大的变化。