Doctrine生成的关联属性是否始终为ArrayCollection类型?

时间:2015-02-05 14:17:00

标签: php symfony doctrine-orm

我正在尝试使用Criteria过滤Doctrine生成的关联属性,如“学说”手册中所述:Filtering Collections

以下是一些示例代码:拥有多辆汽车的人。为简单起见,我们保存了在汽车实体中购买和出售汽车的日期,而不是创建关联实体。

class Car
{
    /**
     * @ORM\ManyToOne(targetEntity="Person", inversedBy="cars")
     * @ORM\JoinColumn(name="owner_id", referencedColumnName="id", nullable=false)
     */
    private $owner;

    /**
     * @ORM\Column(name="bought", type="date")
     */
    private $bought;

    /**
     * @ORM\Column(name="sold", type="date")
     */
    private $sold;
}

class Person
{
    /**
     * @ORM\OneToMany(targetEntity="Car", mappedBy="owner")
     */
    private $cars;

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

    /**
     * Get cars
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getCars()
    {
        return $this->cars;
    }

    public function getCarsOwnedAtDate(\DateTime $date)
    {
        $allCars = $this->getCars();

        $criteria = Criteria::create()->where(
            Criteria::expr()->andX(
                Criteria::expr()->lte("bought", $date),
                Criteria::expr()->gte("sold", $date)
            )
        );

        return $allCars->matching($criteria);
    }
}

getCars的文档说它返回Collection。请注意,此文档由Doctrine自动生成。

因此,当我使用matching方法在Collection上致电getCarsOwnedAtDate时,我的IDE会发出Collection没有matching方法的警告。事实证明,这是对的。

getCars返回的对象是ArrayCollection,并且有matching方法,因此代码运行正常。

我的问题是:我可以依赖Doctrine自动生成的方法总是返回ArrayCollection的事实吗?或者上述代码在某种情况下是否会失败?如果它总是返回ArrayCollection,那么为什么PhpDoc评论没有明确提及这个类?

0 个答案:

没有答案