Symfony 2 / Doctrine 2:同一个表的两个实体,使用一个赞成另一个

时间:2014-05-30 13:38:43

标签: php symfony doctrine-orm

在我的Symfony2应用程序中,我将大部分实体提取到一个单独的库中,我使用composer安装。

这个库没有对Symfony2的依赖(但是依赖于Doctrine,因为我使用了注释),因为我想在其他非Symfony2项目中使用它。

该库包含ClientUser实体,该实体映射到client_users表。在我的Symfony2应用程序中,我想使用相同的ClientUser实体进行身份验证。这要求我实施Symfony\Component\Security\Core\User\UserInterface

问题在于我希望同时拥有一个与Symfony2无关的' a' Symfony-aware'实现ClientUser实体(两者都应映射到同一个表)。我试图从ClientUserAbstract实体扩展这两个类,但它没有工作。

<?php
namespace My\Library\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperClass
 */
class ClientUserAbstract {

    // all my fields here
}

我和#34; Symfony2-agnostic&#34;实体:

<?php
namespace My\Library\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class ClientUser extends ClientUserAbstract {

    // nothing here, it's empty
}

我的#34; Symfony2-aware&#34;实体:

<?php
namespace Vendor\Bundle\MyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @ORM\Entity
 */
class ClientUser extends ClientUserAbstract implements UserInterface {

    // all methods that Symfony requires because of the UserInterface here:
    public function getRoles();
    public function getPassword();
    public function getSalt();
    public function getUsername();
    public function eraseCredentials();
}

我的Symfony 2应用程序现在检测到两个指向同一个表的实体,并因异常而失败。我要么告诉我的Symfony2应用程序&#34;忽略&#34;我的My\Library\Entity\ClientUser,或者我需要一种方法来扩展它。有什么想法吗?

1 个答案:

答案 0 :(得分:15)

以防其他人有这个问题,这是我的评论转换为答案:

对于给定的实体经理,每个表严格一个实体。您需要创建第二个实体管理器并将其用于身份验证。

另外,当然,我喜欢收到销售代表。