PhpStorm不承认Doctrine Entity Classes

时间:2014-12-10 18:37:33

标签: symfony phpstorm

PhpStorm似乎无法识别我的任何Doctrine实体类或其方法。

$comment = $em->getRepository('MyBundle:Comment')->findOneBy(array('id' => $id));

$comment->getId(); 
/* PHPSTORM THROWS WARNING: Method getId() not found in subject class */

只有当我明确地评论它时,错误就会消失 - 这真的使我的控制器变得混乱。

/* @var \MyBundle\Entity\Comment $comment */
$comment = $em->getRepository('MyBundle:Comment')->findOneBy(array('id' => $id));

有没有办法在我的实体类中为PhpStorm记录这个?

我在PhpStorm 8上使用Symfony2插件。谢谢!

4 个答案:

答案 0 :(得分:9)

我有这个问题。通过清除Doctrine元数据神奇地解决了:

php app/console doctrine:cache:clear-metadata

编辑:在symfony插件的GitHub寄存器中,简要描述了发生此问题时该怎么做:

https://github.com/Haehnchen/idea-php-symfony2-plugin

  

自动填充(或其他内容)无效!帮助!

     

[...]

     

许多功能需要    app / cache / dev / appDevDebugProjectContainer.xml 文件存在。它是   在开发环境中启动应用程序时生成的(打开/app_dev.php   在浏览器或php app / console中)。

由于我的服务器是远程的,手动同步文件app/cache/dev/appDevDebugProjectContainer.xml解决了我的问题。

当我在本地服务器上工作时,上面写的命令帮助我重新开始自动完成工作。

答案 1 :(得分:5)

我对Symfony2插件有同样的问题,这可能不是一个很好的解决方案,但它可以工作

/** @var EntityManager $em */
$em = $this->doctrine->getManager();

答案 2 :(得分:1)

现在应该修复你的问题。缓存文件夹中的多个getRepository代理类实现存在问题。只需更新到> = 0.11.81

答案 3 :(得分:0)

现在,我更喜欢将存储库声明为服务,这样您就不会遇到类型提示问题:

services:
    MyBundle\Entity\CommentRepository:
        class: MyBundle\Entity\CommentRepository
        public: true
        factory: ['@doctrine', getRepository]
        arguments:
            - MyBundle\Entity\Comment

然后在您的控制器中:

use MyBundle\Entity\CommentRepository;
//
$comment = $this->get(CommentRepository::class)->findOneBy(['id' => $id]);