13

我正在使用 Doctrine 2,我想生成我的数据库的 ORM,但我不想选择数据库的所有表。

例如,在这个 db 中:

  • 表1没有主键
  • 表2正常

我想用这个命令只选择表 2:

doctrine:mapping:convert --from-database yml ./src/Application/TestBundle/Resources/config/doctrine/metadata/orm --filter="Table2"

我有一个错误:

表 Table_1 没有主键。Doctrine 不支持从没有主键的表中进行逆向工程。

好的,我知道,但我不想在我的 ORM 中使用我的表 1。当我的表 1 有主键时,我可以过滤表。我见过 使用 symfony2 和教义从现有数据库生成单个实体,但它不起作用。

4

4 回答 4

4

忽略表格是解决方案:

doctrine:
    dbal:
        schema_filter: ~^(?!Table1)~
于 2018-07-09T12:17:07.623 回答
4

如果你在没有 Symfony 的情况下使用 Doctrine2,那么你应该将这一行添加到你的引导程序中:

// With this expression all tables prefixed with Table1 will ignored by the schema tool.
$entityManager->getConnection()->getConfiguration()->setFilterSchemaAssetsExpression("~^(?!Table1)~");

整个引导程序看起来像

<?php
// bootstrap.php

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;


// Include Composer Autoload (relative to project root).
require_once "vendor/autoload.php";

// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$paths = array(__DIR__."/doctrine/entities");

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/doctrine/yaml"), $isDevMode);

// the connection configuration
$dbParams = array(
  'driver'   => 'pdo_mysql',
  'user'     => 'username',
  'password' => 'password',
  'dbname'   => 'database',
);

/** @var $entityManager \Doctrine\ORM\EntityManager */
$entityManager = EntityManager::create($dbParams, $config);


// Set the other connections parameters
$conn = $entityManager->getConnection();


$platform = $conn->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');


// With this expression all tables prefixed with t_ will ignored by the schema tool.
$conn->getConfiguration()->setFilterSchemaAssetsExpression("~^(?!t__)~");
于 2015-09-20T19:05:00.640 回答
2

在最新版本的 Doctrine 包中,必须在连接级别配置模式过滤器,因此:

doctrine:
  dbal:
    default_connection: default
    connections:
      default: # <- your connection name
        url: '%env(DATABASE_URL)%'
        schema_filter: '#^(?!table_to_exclude)#'
于 2021-04-20T19:25:41.567 回答
-2

Doctrine 首先验证您的表,然后才执行命令。因此,您应该始终拥有有效的数据库架构,以便对其进行任何操作。

于 2014-07-03T09:25:46.530 回答