Symfony2 db设计

时间:2015-02-19 16:03:57

标签: symfony doctrine-orm

我问了一个问题,但现在意识到这可能与我的设计有关。所以,我有一个警报,每个警报可以有一个或多个AlertFlightNumbers。所以我的Alert实体就像这样

**
 * Alert
 *
 * @ORM\Table(name="alert")
 * @ORM\Entity(repositoryClass="Nick\AlertBundle\Repository\AlertRepository")
 *
 */
class Alert
{
    //all the usual stuff

    /**
     * @ORM\OneToMany(targetEntity="Nick\AlertBundle\Entity\AlertFlightNumbers", mappedBy="availabilityAlert")
     */
    private $flightNumbers;

    /**
     * @return ArrayCollection
     */
    public function getFlightNumbers()
    {
        return $this->flightNumbers;
    }

    /**
     * @param AlertFlightNumbers $flightNumber
     * @return AvailabilityAlert
     */
    public function addFlightNumber(AlertFlightNumbers $flightNumber)
    {
        if (!$this->flightNumbers->contains($flightNumber)) {
            $this->flightNumbers->add($flightNumber);
        }

        return $this;
    }

}

所以我在我的警报实体中有航班号码集。然后在我的AlertFlightNumbers实体中,我有

/**
 * AlertFlightNumbers
 *
 * @ORM\Table(name="alert_flight_numbers", uniqueConstraints={@ORM\UniqueConstraint(name="alert_id", columns={"alert_id", "flight_number"})}, indexes={@ORM\Index(name="IDX_4D3E3675D28831F9", columns={"availability_alert_id"})})
 * @ORM\Entity
 */
class AvailabilityAlertFlightNumbers
{
    /**
     * @ORM\ManyToOne(targetEntity="Nick\AlertBundle\Entity\Alert", inversedBy="flightNumbers")
     * @ORM\JoinColumn(name="availability_alert_id", referencedColumnName="id")
     */
    private $availabilityAlert; 

    /**
     * Get flightNumber
     *
     * @return string 
     */
    public function getFlightNumber()
    {
        return $this->flightNumber;
    }
}

因此,从我所看到的,这是链接这些类型的事物的标准方式,以便警报可以有一个或多个FlightNumbers。

我的问题是这个。我有一个监听器绑定到我所做的警报实体

public function postPersist(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    if ($entity instanceof Alert) {
        $this->alert = $entity;
    }
}

基本上,这会让我获得持久化的警报实体对象。使用该对象,如果我这样做

  

\学说\共同\的Util \调试::转储($ alert-> getFlightNumbers());

我最终得到了

object(stdClass)[398]
  public '__CLASS__' => string 'Nick\AlertBundle\Entity\AlertFlightNumbers' (length=55)
  public 'id' => int 69
  public 'flightNumber' => string 'VS7' (length=3)
  public 'availabilityAlert' => 
    object(stdClass)[414]
      public '__CLASS__' => string 'Nick\AlertBundle\Entity\Alert' (length=42)
      public 'id' => int 65
      public 'searchCommand' => string 'A20APRLONLAX' (length=12)
      public 'isConnecting' => string 'no' (length=2)
      public 'lastUpdated' => string 'DateTime' (length=8)
      public 'isDeleted' => int 0
      public 'alertStatus' => string 'Active' (length=6)
      public 'bookingClass' => string 'Array(1)' (length=8)
      public 'pseudo' => string 'Array(1)' (length=8)
      public 'flightNumbers' => string 'Array(1)' (length=8)

当我调用方法getFlightNumbers时,这不是我真正期望的。真的,我希望使用来自AlertFlightNumbers的getFlightNumber函数,这样我只返回VS7而不是所有其他数据。

所以主要问题是如何才能访问警报航班号?附:我不知道为什么它将字段列为公共字段,因为它们不应该是,如果我尝试访问它们,我会收到私人警告。

由于

0 个答案:

没有答案