在我使用Symfony 4,Doctrine 2和PHP 7.2的项目中,我有一个名为 Location 的实体和一个 LocationRepository (从Doctrine的ServiceEntityRepository扩展而来)。
我正在实现一个 findLocationByUuid 方法,其中给定一个字符串,返回一个位置:
public function getLocationByUuid(string $uuid): Location
{
$location = $this->findOneBy(['uuid' => $uuid]);
if (null == $location) {
throw new LocationNotFoundException();
}
return $location;
}
由于Doctrine的 findOneBy 方法返回 Object ,因此在方法中严格拟合我的返回类型声明并返回 Location 而不是 Object ?我是否应该假设此Object与我的Locations具有相同的行为并将Object声明为返回类型?
答案 0 :(得分:1)
Symfony 4 ./ bin / console make:entity 命令创建实体&存储库类。如示例所示,存储库类具有注释方法,因此您的问题应该得到解决
/**
* @method TinyPuppy|null find($id, $lockMode = null, $lockVersion = null)
* @method TinyPuppy|null findOneBy(array $criteria, array $orderBy = null)
* @method TinyPuppy[] findAll()
* @method TinyPuppy[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class TinyPuppyRepository extends ServiceEntityRepository
答案 1 :(得分:0)
Doctrine的findOneBy
是通用的,因此它不能强制Location
作为返回类型。在我的情况下,我要做的是,不是检查位置是否为空,而是检查它是否是Location
的实例,所以:
if (!$location instanceof Location) {
throw new LocationNotFoundException();
}
通过这种方式,您可以确定如果您的方法返回某些内容,则为Location