Symfony Doctrine2忽略数据库的表

Symfony Doctrine2忽略数据库的表,symfony,filter,doctrine-orm,ignore,Symfony,Filter,Doctrine Orm,Ignore,我使用的是条令2,我想生成数据库的ORM,但我不想选择数据库的所有表 例如,在此数据库中: 表1没有主键 表2为正常值 我只想使用此命令选择表2: doctrine:mapping:convert --from-database yml ./src/Application/TestBundle/Resources/config/doctrine/metadata/orm --filter="Table2" 我有一个错误: 表1没有主键。条令不支持对没有主键的表进行反向工程 好的,我知道,但我不

我使用的是条令2,我想生成数据库的ORM,但我不想选择数据库的所有表

例如,在此数据库中:

表1没有主键 表2为正常值 我只想使用此命令选择表2:

doctrine:mapping:convert --from-database yml ./src/Application/TestBundle/Resources/config/doctrine/metadata/orm --filter="Table2"
我有一个错误:

表1没有主键。条令不支持对没有主键的表进行反向工程

好的,我知道,但我不想在我的ORM中使用表1。当我的表1有主键时,我可以筛选表。我见过
,但它不起作用。

原则首先验证表,然后才执行命令。
因此,您应该始终拥有有效的DB模式,以便对其进行任何操作。

如果您使用Doctrine2而不使用Symfony,那么您应该将这一行添加到引导程序中:

// 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__)~");

忽略该表是解决方案:

doctrine:
    dbal:
        schema_filter: ~^(?!Table1)~

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

doctrine:
  dbal:
    default_connection: default
    connections:
      default: # <- your connection name
        url: '%env(DATABASE_URL)%'
        schema_filter: '#^(?!table_to_exclude)#'

谢谢在我的例子中,我只需要将一个表从MySQL导入Symfony。所以我的命令是php app/console-doctrine:mapping:import-force-StrategioMainBundle-yml-In-config.yml:schema_-filter:~^fundinfo1~你能把这个解决方案作为答案发布并接受吗?此问题出现在symfony2问题的未回答列表中。谢谢。@StephanVierkant我不是OP。看起来用户不会编辑此问题,我们可以在wiki答案中添加答案。我已将答案作为社区答案发布,并删除了我的评论。@StephanVierkant我们是否需要为答案添加一个小的介绍,以解释这是OP的解决方案?如果您正在使用Symfony,但需要让您的实体共享来自Laravel应用程序数据库的表,该怎么办有一些没有主键的表?每个实体类必须有一个标识符/主键: