Symfony 2.1错误:在存储库中导入@ORM \ Table

时间:2013-04-05 17:55:50

标签: symfony doctrine-orm symfony-2.1

我正在将应用程序从Symfony 2.0升级到Symfony 2.1,我跟着this升级文件,所有工作正常,但是在cache:clear之后我在使用某些存储库时遇到错误。这是错误:

[Semantical Error] The annotation "@ORM\Table" in class 
edasiclinic\AlertesBundle\Repository\AlertesRepository was never imported. Did you maybe
forget to add a "use" statement for this annotation?

这是一个例子,我在其他存储库中遇到此错误。我不明白为什么我必须在存储库文件中导入@ORM\Table如果我不在那里使用注释。

此外,如果我等待~10秒然后刷新浏览器,它就可以工作......

修改

这是实体:

<?php

namespace edasiclinic\DatabaseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;


/**
 * edasiclinic\DatabaseBundle\Entity\Alertes
 *
 * @ORM\Table(name="alertes")
 * @ORM\Entity(repositoryClass="edasiclinic\AlertesBundle\Repository\AlertesRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Alertes
{
    /**
     * @var integer $id
     *
     * @ORM\Id
     * @ORM\Column(name="idAlerta", type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    ...
}

这是存储库类:

<?php

namespace edasiclinic\AlertesBundle\Repository;

use Doctrine\ORM\EntityRepository;
use edasiclinic\DasiBundle\Funcions\AES;


class AlertesRepository extends EntityRepository
{

    public function countUnread($user, $idioma, $fus)
    {
        // ...
    }
}

由于

4 个答案:

答案 0 :(得分:3)

今天我遇到了同样的问题。在一些谷歌搜索之后,解决方案显然是在Repository类定义之前包含一个注释块。

在你的情况下:

/**
 * AlertesRepository 
 */
class AlertesRepository extends EntityRepository
{
  ...
}

没有该评论块,您将收到有关“@ORM \ Table”的无意义错误。另一个Symfony / Doctrine oddity&gt; _&gt;

答案 1 :(得分:1)

这是5.3.8之前版本中的PHP错误。来自symfony system requirements

$this->addRecommendation(
    version_compare($installedPhpVersion, '5.3.8', '>='),
    'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156',
    'Install PHP 5.3.8 or newer if your project uses annotations.'
);

如果您无法升级到PHP版本&gt; = 5.3.8,请参阅PHP bug #55156以获取更多详细信息和可能的解决方法。

答案 2 :(得分:0)

您似乎忘了添加use声明。

<?php

namespace Acme\MyBundle\Entity;

// Remember to include this use statement
use Doctrine\ORM\Mapping as ORM;

/**
 * My Entity
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\MyBundle\Entity\MyEntityRepository")
 */
class MyEntity
{
}

答案 3 :(得分:0)

对我来说,它只发生在某些版本的PHP上,解决方案是将Repository类放在实体类文件夹上方的文件夹中