Php 要由EntityManager中的条令映射的筛选表(不带命令行)
我正在我的应用程序上开发一个功能,它包括自动映射和生成实体 问题是用户可以缩放要映射的表,这就是为什么我必须为要转换的表的名称插入过滤器的原因。要在命令行中执行此操作,只需插入参数--filter: 然而,我在PHP中开发下面的函数性,以获得可能错误的返回。此函数将数据库上的所有表映射到XML,并从映射中向后创建实体。同时,我不知道如何通过Doctrine PHP库按名称筛选表,换句话说,如何执行参数--filter='classu name'Php 要由EntityManager中的条令映射的筛选表(不带命令行),php,codeigniter,doctrine-orm,doctrine,Php,Codeigniter,Doctrine Orm,Doctrine,我正在我的应用程序上开发一个功能,它包括自动映射和生成实体 问题是用户可以缩放要映射的表,这就是为什么我必须为要转换的表的名称插入过滤器的原因。要在命令行中执行此操作,只需插入参数--filter: 然而,我在PHP中开发下面的函数性,以获得可能错误的返回。此函数将数据库上的所有表映射到XML,并从映射中向后创建实体。同时,我不知道如何通过Doctrine PHP库按名称筛选表,换句话说,如何执行参数--filter='classu name' public function mapearTab
public function mapearTabelasValidar() {
//Inicializa variáveis
$dirBin = DIR_THIRD_PARTY . 'composer/vendor/bin/';
$dirEntidades = DIR_MODELS . 'entidades/';
$dirMetadados = $dirEntidades . 'metadados/';
$title = 'Modelos gerados com sucesso!';
try {
//Inicializa o Doctrine e a configuração do EntityManager
$doctrine = new Doctrine();
$em = $doctrine->em;
$em->getConfiguration()->setMetadataDriverImpl(
new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
)
);
//Define os metadados
$cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory();
$cmf->setEntityManager($em);
$metadata = $cmf;
/**
* Exporta os metadados das entidades em format xml
*
* Comando similar:
* php doctrine orm:convert-mapping --from-database --force xml /var/www/fwsibe/sistema/models/entidades/metadados
*/
//echo "<pre>";
//print_r($metadata);
//die();
$cme = new \Doctrine\ORM\Tools\Export\ClassMetadataExporter();
$exporter = $cme->getExporter('xml', $dirMetadados);
$exporter->setMetadata($metadata->getAllMetadata());
$exporter->export();
/**
* Gera as entidades a partir do mapeamento XML gerado anteriormente
*
* Comando similar:
* php doctrine orm:generate:entities --generate-methods=1 --update-entities=1 /var/www/fwsibe/sistema/models/entidades
*/
$generator = new \Doctrine\ORM\Tools\EntityGenerator();
$generator->setGenerateStubMethods(true);
$generator->setRegenerateEntityIfExists(false);
$generator->generate($metadata->getAllMetadata(), $dirEntidades);
//Trata a possível exeção
} catch (Exception $exc) {
mensagemExcecao($exc, "Falha ao mapear tabelas!", true);
}
}
公共函数MapeartablesValidar(){
//瓦里亚维斯酒店
$dirBin=DIR_第三方。'composer/vendor/bin/';
$dirEntidades=DIR_模型。“entidades/”;
$dirMetadados=$dirEntidades.'metadados/';
$title='modelosgerados com successo!';
试一试{
//实体管理者配置原则
$条令=新条令();
$em=$em->em;
$em->getConfiguration()->setMetadataDriverImpl(
新建\doctor\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
)
);
//定义操作系统元数据
$cmf=new\Doctrine\ORM\Tools\DisconnectedClassMetadataFactory();
$cmf->setEntityManager($em);
$metadata=$cmf;
/**
*Exporta os metadados das entidades em格式xml
*
*科曼多类似:
*php原则orm:转换映射——来自数据库——强制xml/var/www/fwsibe/sistema/models/entidades/metadados
*/
//回声“;
//打印(元数据);
//模具();
$cme=new\doctor\ORM\Tools\Export\ClassMetadataExporter();
$exporter=$cme->getExporter('xml',$dirMetadados);
$exporter->setMetadata($metadata->getAllMetadata());
$exporter->export();
/**
*Gera作为一个Parter do mapeamento XML实体gerado anteriormente
*
*科曼多类似:
*php原则orm:generate:entities--generate methods=1--updateentities=1/var/www/fwsibe/sistema/models/entidades
*/
$generator=new\Doctrine\ORM\Tools\EntityGenerator();
$generator->setGenerateStubMethods(true);
$generator->SetRegeneratEntityIfExists(false);
$generator->generate($metadata->getAllMetadata(),$dirEntidades);
//餐厅餐厅
}捕获(例外$exc){
mensageexeccao($exc,“Falha ao mapear tabelas!”,正确);
}
}
谢谢 对于Doctrine 2.4,当您调用
Doctrine orm:convert mapping--from database--filter
时,请注意,过滤器是使用PHP中的函数strpos
完成的。筛选器的行为就像在搜索“table%”,因此将查找以筛选的字符串开头的任何实体
您可以重写或更改用于生成搜索的方法以获得更好的过滤器。这说明了如何做到这一点:
Doctrine 2.5的MetadataFilter::accept()已更新为使用preg_match()而不是strpos()谢谢!对的我重写了条令\ORM\Tools\Console\MetadataFilter类的方法accept()。我将if(strpos($metadata->name,$filter)!==false)更改为if(preg_match('/^.$filter.$/',$metadata->name))。我在旁边的链接中找到了更多关于此的信息:
public function mapearTabelasValidar() {
//Inicializa variáveis
$dirBin = DIR_THIRD_PARTY . 'composer/vendor/bin/';
$dirEntidades = DIR_MODELS . 'entidades/';
$dirMetadados = $dirEntidades . 'metadados/';
$title = 'Modelos gerados com sucesso!';
try {
//Inicializa o Doctrine e a configuração do EntityManager
$doctrine = new Doctrine();
$em = $doctrine->em;
$em->getConfiguration()->setMetadataDriverImpl(
new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
)
);
//Define os metadados
$cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory();
$cmf->setEntityManager($em);
$metadata = $cmf;
/**
* Exporta os metadados das entidades em format xml
*
* Comando similar:
* php doctrine orm:convert-mapping --from-database --force xml /var/www/fwsibe/sistema/models/entidades/metadados
*/
//echo "<pre>";
//print_r($metadata);
//die();
$cme = new \Doctrine\ORM\Tools\Export\ClassMetadataExporter();
$exporter = $cme->getExporter('xml', $dirMetadados);
$exporter->setMetadata($metadata->getAllMetadata());
$exporter->export();
/**
* Gera as entidades a partir do mapeamento XML gerado anteriormente
*
* Comando similar:
* php doctrine orm:generate:entities --generate-methods=1 --update-entities=1 /var/www/fwsibe/sistema/models/entidades
*/
$generator = new \Doctrine\ORM\Tools\EntityGenerator();
$generator->setGenerateStubMethods(true);
$generator->setRegenerateEntityIfExists(false);
$generator->generate($metadata->getAllMetadata(), $dirEntidades);
//Trata a possível exeção
} catch (Exception $exc) {
mensagemExcecao($exc, "Falha ao mapear tabelas!", true);
}
}