我试图使用Docrtrine
映射建模继承,但得到一个错误。
我想映射简单的关系。 UserEntity
将成为其他用户相关实体的基础实体,如GuestUserEntity
,AdminEntity
。
我有BaseUserEntity
的以下映射
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd">
<entity name="MngIt\User\Domain\BaseUserEntity"
repository-class="MngIt\User\Infrastructure\UserEntityRepository"
inheritance-type="SINGLE_TABLE"
table="mng_users">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<discriminator-column name="discriminator"/>
<discriminator-map>
<discriminator-mapping value="buyer" class="MngIt\Admin\Domain\AdminEntity"/>
</discriminator-map>
<field name="login" type="string" column="login"/>
<field name="username" type="string" column="username"/>
<field name="email" type="string" column="email"/>
<field name="balance" type="string" column="balance"/>
<field name="lang" type="string" column="lang"/>
<field name="timeDifference" type="string" column="timedifference"/>
</entity>
</doctrine-mapping>
定义了以下实体类
class BaseUserEntity extends \MngIt\Base\Domain\BaseEntity {
protected $username;
protected $login;
protected $email;
protected $balance;
protected $timeDifference;
/**
* @return mixed
*/
public function getUsername() {
return $this->username;
}
// getters ...
}
对于AdminEntity
,我有以下xml映射
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd">
<entity name="MngIt\Buyer\Domain\BuyerEntity"
repository-class="MngIt\Admin\Infrastructure\AdminEntityRepository">
</entity>
</doctrine-mapping>
该课程定义如下
<?php
namespace MngIt\Buyer\Domain;
use MngIt\User\Domain\BaseUserEntity;
class AdminEntity extends BaseUserEntity {
}
每当我尝试查询用户时,我都会收到以下错误
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mngit.AdminEntity'
我的配置有什么问题?
首先,我可以假设BaseUserEntity
类只是一个包含公共属性的基本实体。在这种情况下,最好使这个类abtract
abstract class BaseUserEntity extends \MngIt\Base\Domain\BaseEntity {
此外,我可以看到您已为该实体定义了自定义存储库
repository-class="MngIt\User\Infrastructure\UserEntityRepository"
到目前为止这是一个基本实体,没有必要定义存储库。
如果配置了缓存,也请考虑清除缓存。
$config->setQueryCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
$config->setResultCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
要清除缓存,您可以运行该命令
php app/console cache:clear
或以编程方式
$cacheDriver = $entityManager->getConfiguration()->getResultCacheImpl();
$deleted = $cacheDriver->deleteAll();
希望有所帮助