带有消息的 Doctrine MappingException '目标实体 Entity\\ItemsBags 无法在 'Entity\\Players#itemsBag' 中找到

Posted

技术标签:

【中文标题】带有消息的 Doctrine MappingException \'目标实体 Entity\\\\ItemsBags 无法在 \'Entity\\\\Players#itemsBag\' 中找到【英文标题】:Doctrine MappingException with message 'The target-entity Entity\\ItemsBags cannot be found in 'Entity\\Players#itemsBag'带有消息的 Doctrine MappingException '目标实体 Entity\\ItemsBags 无法在 'Entity\\Players#itemsBag' 中找到 【发布时间】:2017-09-05 10:39:21 【问题描述】:

美好的一天。我已经在第二天了,我不明白这是怎么回事......我在运行时收到错误:

php 致命错误:未捕获的异常 'Doctrine\ORM\Mapping\MappingException' 带有消息'The 找不到目标实体 Entity\ItemsBags '实体\玩家#itemsBag'。'在 /var/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php:762 堆栈跟踪: #0./var/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php(1028): Doctrine\ORM\Mapping\MappingException::invalidTargetEntityClass('Entity\\ItemsBag...', 'Entity\\Players', 'itemsBag') #1./var/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php(272): Doctrine\ORM\Mapping\ClassMetadataInfo->validateAssociations() #2./var/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php(251): Doctrine\ORM\Mapping\ClassMetadataFactory->validateRuntimeMetadata(Object(Doctrine\ORM\Mapping\ClassMetadata), 空值) #3./var/www/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(332): Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadM in /var/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php 在第 762 行

当我检查教义和更新时,一切都很顺利:

root@comp:# php vendor/bin/doctrine orm:schema:update --force 更新 数据库架构... 数据库架构更新成功! “4”个查询 被处决


root@comp:# php vendor/bin/doctrine orm:validate-schema [映射] OK - 映射文件正确。 [数据库] OK - 数据库架构与映射文件同步。

我尝试清除缓存,删除代理并重新生成它们,但没有任何结果...

root@comp:# php vendor/bin/doctrine orm:clear-cache:metadata
Clearing ALL Metadata cache entries
Successfully deleted cache entries.
root@comp:# php vendor/bin/doctrine orm:clear-cache:query
Clearing ALL Query cache entries
Successfully deleted cache entries.
root@comp:# php vendor/bin/doctrine orm:clear-cache:result
Clearing ALL Result cache entries
Successfully deleted cache entries.
root@comp:# php vendor/bin/doctrine orm:generate-proxies
Processing entity "Entity\Objects"
Processing entity "Entity\Weapons"
Processing entity "Entity\ItemsBags"
Processing entity "Entity\Players"
Processing entity "Entity\Translations"
Processing entity "Entity\Worlds"
Processing entity "Entity\Tiles"
Processing entity "Entity\WorldStructures"

Proxy classes generated to "/tmp"

Players.php

namespace Entity;
use Doctrine\Common\Collections\ArrayCollection;

/**
 *
 * @Entity
 * @Table(name="players")
 *
 */
class Players

    ...

    /**
     * @var ItemsBags
     *
     * @OneToOne(targetEntity="ItemsBags", mappedBy="player")
     */
    private $itemsBag;

    ...

ItemsBags.php

namespace Entity;
use Doctrine\Common\Collections\ArrayCollection;

/**
 *
 * @Entity
 * @Table(name="item_bags")
 *
 */
class ItemsBags

    ...

    /**
     * @var Players
     *
     * @OneToOne(targetEntity="Players", inversedBy="itemsBag")
     * @JoinColumn(name="player_id", referencedColumnName="id")
     */
    private $player;

    ...


请告诉我,我做错了什么?

【问题讨论】:

我会尝试删除 @JoinColumn 行,看看是否有帮助。 无效( 您可以尝试使用完全限定名称:@OneToOne(targetEntity="\Entity\ItemsBags", mappedBy="player")@OneToOne(targetEntity="\Entity\Players", inversedBy="itemsBag")。虽然它似乎确实在那里寻找他们...... 你配置了psr-4根吗?在你的作曲家文件中寻找 psr-4 我尝试使用完全限定名称,但这也没有效果。 @Sarcoma我不太明白你的问题......我在我的项目中只使用学说,使用作曲家。我这样初始化学说:pastebin.com/AYB7Zvnd 【参考方案1】:

感谢@Sarcoma。我只是忘了在我的 composer.json 中指定自动加载部分

  "autoload": 
    "psr-4":  "": "core/" 
  ,

P.S 谁能告诉我,为什么我的项目之前运行正常?)在我也有很多实体之前,我的 composer.json 中没有该部分,但一切正常。

【讨论】:

以上是关于带有消息的 Doctrine MappingException '目标实体 Entity\\ItemsBags 无法在 'Entity\\Players#itemsBag' 中找到的主要内容,如果未能解决你的问题,请参考以下文章

带有 ZF2 的 Doctrine 2 如何更新行

带有模式注释的 Doctrine ORM 表

Doctrine 2 和带有额外字段的多对多链接表

带有绑定参数的大型查询会导致Doctrine中的参数编号错误

带有 Symfony2 的 Doctrine2 无法识别数据库字符集和排序规则

Doctrine DBAL - 带有附加参数的 WHERE IN 数组