Symfony - Doctrine 实体的返回类型

Posted

技术标签:

【中文标题】Symfony - Doctrine 实体的返回类型【英文标题】:Symfony - Return type for Doctrine entity 【发布时间】:2018-06-03 20:24:08 【问题描述】:

php7 开始,我们已经知道可以声明函数的返回类型。然后,如果该函数返回其他内容,则会引发异常。

现在我想在我的 Symfony 项目中的一个函数返回一个 Doctrine 实体时使用这个新功能。所以我尝试声明一个这样的函数:

public function getEntity(array $conditions, string $entityClass): ?object

    // some logic...
    return $queryBuilder->setMaxResults(1)->getQuery()->getOneOrNullResult();

如您所见,它必须返回 nullobject 变量。但是,object 似乎没有按预期工作,因为我遇到了异常:

类型错误:返回值 HelperBundle\MyHelper::getEntity() 必须是 HelperBundle\object 的实例或 null,AppBundle\Entity\MyEntity 实例返回

我实际上不确定这条消息的含义:返回的对象应该派生自位于HelperBundle 的类还是什么?

但一般来说,有没有一种方法可以在不使用自定义基类或接口的情况下为通用 Doctrine 实体声明返回类型?

【问题讨论】:

投反对票到底是什么? 【参考方案1】:

我刚刚阅读了一篇关于此的文章,不支持将返回类型提示作为对象

但是,您可以在 PHP 7.2 中: http://php.net/manual/en/migration72.new-features.php

【讨论】:

您在“或空”部分略有错误。可空类型在 php 7.1 中引入,参见 php.net/manual/ru/migration71.new-features.php。【参考方案2】:

为了回答你的第一个问题,我只想说这个声明

public function getEntity(array $conditions, string $entityClass): ?object

被 PHP HelperBundle 命名空间中声明了 object 类。

【讨论】:

我依赖于 PhpStorm,因为它没有给出任何错误,所以我认为它已经可以从 php 7.1... 我的错:\

以上是关于Symfony - Doctrine 实体的返回类型的主要内容,如果未能解决你的问题,请参考以下文章

Symfony - Doctrine实体的返回类型

Symfony2/Doctrine:如何从实体类中持久化一个实体?

FOSUserBundle 在 EasyAdminBundle 中管理((“用户”实体必须使用“类”选项定义其关联的 Doctrine 实体类))Symfony

如何使用doctrine查询symfony2中实体类中的另一个实体

Symfony 4 Doctrine存储库不返回一个字段值

Symfony4 / Doctrine,如何选择“不同”的对象? getResult() 返回字符串数组,而不是对象数组