Doctrine:如何键入一个返回实体集合的getter

时间:2018-02-09 14:06:49

标签: collections doctrine-orm doctrine criteria

我想开始使用Criteria,但我有一个非常基本的问题,我找不到任何有关的信息。

假设我有一个拥有方法getStudents的实体。此方法可以返回ArrayCollectionPersistentCollection,两者都来自matching接口的Selectable方法。问题是,我应该将提示键入什么作为getStudents方法的返回值?在我看到的任何地方,人们建议使用Collection接口作为类型提示,这两个类共享,但此接口不扩展Selectable,因此它没有{{1 }} 方法!所以看起来有些不一致。

在许多教程中,例如here,我们有类似的内容:

matching

但如果public function getExpertScientists() { $criteria = Criteria::create() ->andWhere(Criteria::expr()->gt('yearsStudied', 20)) ->orderBy(['yearsStudied', 'DESC']); return $this->getGenusScientists()->matching($criteria); } 是没有匹配方法的类型提示$this->getGenusScientists(),它会在我的IDE中生成警告,并且感觉有些不对。

你是如何处理的?除了忽略IDE警告或输入我们的getter可以返回的所有内容(例如:Collection)之外,我们还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

不确定是否有其他IDE,所以我将回答PHPStorm。

我一直使用@return Collection|Selectable,效果很好。 如果该方法返回例如Student个实体,您也可以输入为。 @return Collection|Selectable|Student[]因此IDE可以理解Doctrine Collections的所有内容,但是如果您稍后对其进行迭代或访问单个元素,它也可以键入提示Student的方法。

当然,从语义上讲这没有多大意义,因为您期望的是类似@return Collection&Selectable&Student[]的东西,因为您返回的是交集类型而不是联合类型。

从PHPStorm 2018.3版本开始,实际上甚至可以使用交集类型(请参见this update),因此@return Collection&Selectable&Student[]可以工作,这有助于您在代码中区分实际的联合和交集类型。 / p>