多个命名空间中的Doctrine继承

时间:2013-12-02 19:40:35

标签: php oop symfony doctrine-orm doctrine

我目前正在与Symfony2和Doctrine2合作建立一个拥有我自己的几个捆绑的网站。我遇到问题的是CoreBundle和UserBundle。

我想让一个日志管理器在DB中存储多个动作。因此,我在Log中使用我需要的属性创建了一个抽象实体CoreBundle,并使用doctrine进行映射。没问题。

现在,我想在UserBundle中为我想要存储的每种Log扩展此类。我这样做了,将@InheritanceType添加到Log类以及@DiscriminatorColumn and @DiscrimiatorMap。实体在另一个包中,我在地图中完全命名它们。

问题在于,当我尝试它时,Doctrine会抛出异常: Entity class 'EP\UserBunble\Entity\Log\LoginUserLog' used in the discriminator map of class 'EP\CoreBundle\Entity\Log\Log' does not exist.

我不明白,因为我已经两次这样做了。唯一的区别是在同一个文件夹/命名空间中的所有实体。

你有什么想法吗? 感谢

以下是源文件:

1 - 记录

namespace EP\CoreBundle\Entity\Log;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * Log
 * @ORM\Table(name="ep_logs")
 * @ORM\Entity()
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discriminator", type="string")
 * @ORM\DiscriminatorMap({"user_registration"="EP\UserBundle\Entity\Log\RegistrationUserLog", "user_login"="EP\UserBunble\Entity\Log\LoginUserLog"})
 */
abstract class Log{
    /**
     * @var integer
     * @ORM\Column(name="id", type="bigint", options={"unsigned"=true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     * @ORM\Column(name="domain", type="string", length=255)
     */
    protected $domain;

    /**
     * @var array
     * @ORM\Column(name="details", type="array")
     */
    protected $details;
}

2 - BaseUserLog:

namespace EP\UserBundle\Entity\Log;

use EP\DBAL\Types\EnumLogDomainType as LogDomain;
use EP\CoreBundle\Entity\Log\Log;
use EP\UserBundle\Entity\User;

/**
 * BaseUserLog
 */
abstract class BaseUserLog extends Log{
    const DEFAULT_DOMAIN = LogDomain::DOMAIN_USERS;

    /**
     * @var User
     */
    protected $user;
}

3 - LoginUserLog

namespace EP\UserBundle\Entity\Log;

use Doctrine\ORM\Mapping as ORM;
use EP\DBAL\Types\EnumLogActionType as LogAction;
use EP\UserBundle\Entity\Log\BaseUserLog;

/**
 * LoginUserLog
 * @ORM\Entity()
 */
class LoginUserLog extends BaseUserLog{
    const DEFAULT_ACTION = LogAction::ACTION_USER_LOGIN;

}

0 个答案:

没有答案