首页 > 解决方案 > PhpStorm 中的 Doctrine 存储库提示

问题描述

这是一个两部分的问题。

首先,我似乎不知道如何使 PhpStorm 正确提示 Doctrine 存储库:

实体看起来像这样:

/**
 * @ORM\Entity(repositoryClass="UserRepository")
 * @Entity @Table(name="users")
 */
class User
{

存储库如下所示:

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function getUser() {}
}

但是当像这样访问存储库方法时:

$userRepository = $em->getRepository(User::class);
$user = $userRepository->getU... // getUser() is not suggested

PhpStorm 不建议使用该getUser()方法。

我发现的唯一解决方法是:

/** @var UserRepository $userRepository */
$userRepository = $em->getRepository(User::class);

但是每次我需要一些存储库时,这样做似乎有点麻烦。

另外,问题的第二部分是我不能将存储库用作类属性:

private EntityManager $em;
    
private UserRepository $userRepository;
    
public function __construct(EntityManager $em) {
    $this->em = $em;
    $this->userRepository = $em->getRepository(User::class);
}

因为它说:

Incompatible types: Expected property of type '\MyProject\UserRepository', '\Doctrine\Persistence\ObjectRepository|\MyProject\User|string' provided 

如何为这两种情况正确设置?

标签: phpdependency-injectiondoctrinephpstormtype-hinting

解决方案


推荐阅读