运行Doctrine转换映射时跳过表 [英] skip tables when running Doctrine convert-mapping

查看:74
本文介绍了运行Doctrine转换映射时跳过表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我第一次坐在教条上,试图在现有的网站/数据库上使用一些命令行工具。我在命令行中使用了映射和实体反向工程工具,并希望看到从php / mysql中现有网站生成的文件类型。



但是,它停止在任何异常。我已经能够为枚举创建一个类型映射,以便现在将它们抛出一个字符串,但是现在它阻止了我没有指定主ID的表。我对在链接表中使用主键或复合键的演讲不感兴趣,我只是试图在学习教条的同时产生一些输出。



有没有办法告诉学说跳过正在抛出异常的表,或者是在没有停止的情况下触发它们进行桶通过?我只想要一些样本输出,不想完全重新考虑一个复杂的数据库,只是为了看看Doctrine可以做什么。



SW

解决方案

再次重新审视同一个问题。我发现似乎工作的是通过引导文件在cli配置中使用过滤器:

  // bootstrap.php 
require_once(vendor / autoload.php);

使用Doctrine\ORM\Tools\Setup;
使用Doctrine\ORM\EntityManager;

$ site_root = realpath(__ DIR__。/../);

$ paths = [$ site_root。 / libraries / Doctrine / Entities];
$ isDevMode = false;

//使用命令行工具从数据库构建实体时使用
$ config = Setup :: createAnnotationMetadataConfiguration($ paths,$ isDevMode);

$ filter_include = [
'some_table_name',
'another_table_name',
'。* some_sub_portion。*',
'^ some_table_prefix _。*' ,
'。* some_table_suffix $'
];
$ include_reg ='/ ^('。implode('|',$ filter_include)')。* $ /';

$ filter_exclude = [
//没有主键的表生成异常
'some_table_name',
'another_table_name',
'。* some_sub_portion。 *',
'^ some_table_prefix _。*',
'。* some_table_suffix $'
];
$ exclude_reg ='/ ^(?!(?:'。implode('|',$ filter_exclude)')$)。* $ /';

// use include list
// $ config-> setFilterSchemaAssetsExpression($ include_reg);
//使用排除列表
$ config-> setFilterSchemaAssetsExpression($ exclude_reg);

//连接配置
$ dbParams = array(
'driver'=>'pdo_mysql',
'user'=>'myuser'
'password'=>'mypassword',
'dbname'=>'mydatabase',
);

$ entityManager = EntityManager :: create($ dbParams,$ config);

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


I'm sitting down with doctrine for the first time and trying to use some of it's command line tools on an existing site/database. I've played with the mapping and entity reverse-engineering tools from the command line and wanted to see what kind of files it would generate from an existing website in php/mysql.

However, it stops on any Exceptions. I was already able to create a type mapping for enum to just throw them to a string for now, but now it's stopping me on tables that do not have a primary ID key specified. I'm not interested in a lecture on using primary keys or compound keys in link tables, I'm just trying to generate some output while learning Doctrine at the moment.

Is there a way to either tell doctrine to skip tables that are throwing exceptions or to barrel through without stopping when it hits them? I just want some sample output at the moment and don't want to entirely re-factor a complex database just to see what Doctrine can do.

SW

解决方案

Revisiting this same issue again. What I found that seems to work was using filtering in the cli configuration via the bootstrap file:

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

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

$site_root = realpath(__DIR__ . "/../");

$paths = [ $site_root . "/libraries/Doctrine/Entities" ];
$isDevMode = false;

// used when building entities from database using command line tool
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);

$filter_include = [
    'some_table_name',
    'another_table_name',
    '.*some_sub_portion.*',
    '^some_table_prefix_.*',
    '.*some_table_suffix$'
];
$include_reg = '/^(' . implode('|', $filter_include) . ').*$/';

$filter_exclude = [
    // tables with no primary key generate exceptions
    'some_table_name',
    'another_table_name',
    '.*some_sub_portion.*',
    '^some_table_prefix_.*',
    '.*some_table_suffix$'
];
$exclude_reg = '/^(?!(?:' . implode('|', $filter_exclude) . ')$).*$/';

// use include list
//$config->setFilterSchemaAssetsExpression($include_reg);
// use exclude list
$config->setFilterSchemaAssetsExpression($exclude_reg);

// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'myuser',
    'password' => 'mypassword',
    'dbname'   => 'mydatabase',
);

$entityManager = EntityManager::create($dbParams, $config);

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

这篇关于运行Doctrine转换映射时跳过表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆