当前位置: 首页 > 知识库问答 >
问题:

如何在一个项目中设置多个实体经理的原则2?(不含Symfony/Zend)

狄旭
2023-03-14

我使用教义2(没有Zend和Symfony)在我的项目中访问两个不同的MySQL数据库。

我尝试为每个数据库创建两个EntityManager。这两个引导文件被设置为使用它们自己的类,这些类位于src文件夹中。它们通过“orm:convert-mapping--from-database”和“orm:generate-entities--generate annotations=true”进行反向工程,并通过“orm:validate-schema”进行验证。

但是引导文件使用相同的autoload.php配置,它位于安装作曲家和原则2的供应商文件夹中。

composer.json文件位于项目文件夹中。

目前,只有最后生成的模式“EntitiesAnlagenAnalysis”正在工作,而第一个生成的模式“EntitiesPreisAnalyse”正在生成错误:

在ProjectDir中不存在带消息'Class'artikel'的教义\通用\持久性\映射\映射异常\MappingException.php:96

#1 ProjectDir\供应商\学说\公共\lib\学说\公共\持久性\映射\Runtime反射ervice.php(41):学说\公共\持久性\映射\映射异常::nonExistingClass('artikel')

#2 ProjectDir\供应商\学说\公共\lib\学说\公共\持久性\映射\AbstractClassMetadataFactory.php(281):学说\公共\持久性\映射\运行时反射服务-

#3 ProjectDir\vendor\doctor\common\lib\doctor\common\Persistence\Mapping\AbstractClassMetadataFactory。php(311):条令\Common\Persistence\Mapping\AbstractClassMetadataFactory-

#4 ProjectDir\vendor\doctor\orm\lib\doctor\orm\Mapping\ClassMetadataFactory。php(78):ProjectDir\vendor\doctor\Common\lib\doctor\Common\Persistence\MappingException中的条令\Common\P。php在线96

详细了解我的项目结构:层次结构图

{
  "require": {
    "doctrine/orm": "*"
  },
  "autoload": {
    "psr-0":
      {
        "": ["EntitiesAnlagenAnalyse/src/", "EntitiesPreisAnalyse/src/"]
      }
  }
}
<?php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

require_once(__DIR__."/../vendor/autoload.php");

// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode, null, null, false);
$config->setProxyDir(__DIR__."/proxies");

// database configuration parameters
$conn = array(
    'driver' => 'pdo_mysql',
    'user' => '****',
    'password' => '****',
    'dbname' => '****',
);

// obtaining the entity manager
$AnlagenAnalyseManager = EntityManager::create($conn, $config);
<?php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

require_once(__DIR__."/../vendor/autoload.php");

// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode, null, null, false);
$config->setProxyDir(__DIR__."/proxies");

// database configuration parameters
$conn = array(
    'driver' => 'pdo_mysql',
    'user' => '****',
    'password' => '****',
    'dbname' => '****',
);

// obtaining the entity manager
$PreisAnalyseManager = EntityManager::create($conn, $config);

如果我现在尝试使用第二个EntityManager“PreisAnalyse”,它似乎正在使用“EntitiesAnlagenAnalysis”的映射,因为它尝试获取列“t0.Bezeichung”,该列仅位于“EntitiesAnlagenAnalysis”中的“Artikel”类中。但它正在查询正确的数据库,其中“bezeichnung”不存在。

信息:两个管理器中的某些类具有相同的名称。因此,在两个实体管理器中都有一个表“Artikel”。

带有消息SQLSTATE[42S22]:未找到列:1054未知列t0.bezeichnung在ProjectDir\供应商\原则\dbal\lib\原则\DBAL\驱动程序\PDOC中的字段列表中onnection.php:104

#0 ProjectDir\供应商\原则\dbal\lib\原则\DBAL\驱动程序\PDOConnection.php(104): PDO-

#1 ProjectDir\vendor\doctor\dbal\lib\doctor\dbal\Connection。php(833):条令\DBAL\Driver\PDOConnection-

#2 ProjectDir\供应商\学说\orm\lib\学说\ORM\人\实体\BasicEntityPersister.php(884):学说\DBAL\连接-

#3 ProjectDir\供应商\学说\orm\lib\学说\ORM\EntityRepository.php(181):学说\ORM\居民\实体\BasicEntityPersier-

#4 ProjectDir\供应商\学说\orm\lib\学说\ORM\EntityRepository.php(164):学说\ORM\EntityRepository-在ProjectDir\供应商\学说\dbal\lib\学说\DBAL\驱动程序\AbstractMySQLDriver.php在第71行

现在,我尝试切换自动加载程序PSR-0数组中的字符串,它正在为“PreisAnalyseManager”和“AnlagenAnalyseManger”工作,但直到它到达带有“Artikel”类的查询为止。因此,这显然是自动加载器的问题,新问题是:

如何在autoloader中定义名称空间,以便doctrine正确地使用它?

{
  "require": {
    "doctrine/orm": "*"
  },
  "autoload": {
    "psr-0":
      {
        "": ["EntitiesPreisAnalyse/src/", "EntitiesAnlagenAnalyse/src/"]
      }
  }
}

共有1个答案

宰父玄天
2023-03-14

解决方案是使用PSR-4自动加载器而不是PSR-0,就像Sadok-f在我问题下面的评论中所说的,我添加了特定的命名空间,最后composer.json:

{
  "require": {
    "doctrine/orm": "*"
  },
  "autoload": {
    "psr-4":
      {
        "Preis\\": "EntitiesPreisAnalyse/src/",
        "Anlagen\\": "EntitiesAnlagenAnalyse/src/"
      }
  }
}
 类似资料:
  • 问题内容: 可以说我有一个视图表。我想从中获取数据到实体。我可以(以及如何)创建实体类来做到这一点。(无需保存操作)。我只想显示它们。 问题答案: 查询视图没有什么特别的-它只是一个虚拟表。这样设置您的实体表并享受:

  • 我试图坚持两个实体,它们有一对一和多对一的关系。 我正在尝试将表单集合嵌入到表单中。 我有一个多对一相关的实体,每次我创建一个新的课程简历,它与Candidat列相关candidat_id_id为空。 除了数据可数据中的Candidat id之外,只有实体Curendar umVitae被成功创建和持久化。 简历表 id|titre|candidat_id_id|id_education cand

  • 我有一个(基于Maven的)项目a加载在Intellij中,它有许多依赖项。 我想在B中放置断点并调试项目A,以便在项目B中达到断点时A停止。 在Eclipse中,我只需要将两个项目放在同一个工作区中,它就可以工作了。由于Intellij中没有工作区,我想知道该如何做,以及是否可能。

  • 问题内容: 我想在Django项目中有2个单独的管理站点。 我的意思是单独的-他们应该具有单独的用户身份验证,他们应该管理不同的模型,并且具有不同的外观和URL。 我想要这样做的原因是客户希望使用单独的部分来管理页面的CMS部分,并希望将其单独用作“后台”解决方案。 我考虑过只在项目树中创建一个od django.contrib.auth应用程序副本,以不同的方式命名它,并对两者使用单独的调用。这

  • 我的问题:当我删除一个项目实体时,它被从Project表中移除,但是这个项目和标记之间的project_tag表中的关系没有被删除。然后,如果我创建了一个新的项目实体,就会抛出一个异常。 实体: 标签 控制器中操作的完整代码:

  • 我有三个表在我的MySQL数据库,看起来像下面这些: 注意:我从那些表中删除了一些定义部分,比如AUTO_INCREMENT,以便使模式更简单。 我的问题是,我需要将这些表映射到实体类,比如和,但我不知道如何管理表中的列,以及如何管理实体中的这些关系。 我的第一个猜测是: 文件 文件 这些实体将生成我需要的三个表,但在表中没有我真正需要的列。把它放在那里很重要。我还可以创建第三个实体,例如,但我不