Symfony Doctrine2忽略数据库的表
我使用的是条令2,我想生成数据库的ORM,但我不想选择数据库的所有表 例如,在此数据库中: 表1没有主键 表2为正常值 我只想使用此命令选择表2: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没有主键。条令不支持对没有主键的表进行反向工程 好的,我知道,但我不
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应用程序数据库的表,该怎么办有一些没有主键的表?每个实体类必须有一个标识符/主键: