Php 要由EntityManager中的条令映射的筛选表(不带命令行)

Php 要由EntityManager中的条令映射的筛选表(不带命令行),php,codeigniter,doctrine-orm,doctrine,Php,Codeigniter,Doctrine Orm,Doctrine,我正在我的应用程序上开发一个功能,它包括自动映射和生成实体 问题是用户可以缩放要映射的表,这就是为什么我必须为要转换的表的名称插入过滤器的原因。要在命令行中执行此操作,只需插入参数--filter: 然而,我在PHP中开发下面的函数性,以获得可能错误的返回。此函数将数据库上的所有表映射到XML,并从映射中向后创建实体。同时,我不知道如何通过Doctrine PHP库按名称筛选表,换句话说,如何执行参数--filter='classu name' public function mapearTab

我正在我的应用程序上开发一个功能,它包括自动映射和生成实体

问题是用户可以缩放要映射的表,这就是为什么我必须为要转换的表的名称插入过滤器的原因。要在命令行中执行此操作,只需插入参数--filter:

然而,我在PHP中开发下面的函数性,以获得可能错误的返回。此函数将数据库上的所有表映射到XML,并从映射中向后创建实体。同时,我不知道如何通过Doctrine PHP库按名称筛选表,换句话说,如何执行参数--filter='classu 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);
        }
    }
公共函数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);
        }
    }