Doctrine 2继承映射未找到基表或视图

问题描述 投票:3回答:1

我试图使用Docrtrine映射建模继承,但得到一个错误。

我想映射简单的关系。 UserEntity将成为其他用户相关实体的基础实体,如GuestUserEntityAdminEntity

我有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' 

我的配置有什么问题?

php symfony doctrine-orm doctrine
1个回答
1
投票

首先,我可以假设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();

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.