如何在学说2中配置引号策略



i'am尝试从mysql移到postgresql,并粘在上案字段中的ANSI引号上。

我阅读了有关手册中的学说引用策略的章节。不幸的是,我不明白我必须放置配置代码。

为了获得ANSI报价策略,我应该使用此代码:

$configuration->setQuoteStrategy(new AnsiQuoteStrategy());

我在Symfony 2上 - 我想这在配置方面很重要。

doctrine-bundle 1.5 。

config.yml 中配置它:

doctrine:
    # ...
    orm:
        # ...
        quote_strategy: doctrine.orm.quote_strategy.ansi

适用于多个实体经理:

doctrine:
    # ...
    orm:
        # ...
        entity_managers:
            default:
                quote_strategy: doctrine.orm.quote_strategy.ansi

要实现这一目标,您将不得不使用服务容器弄脏和肮脏。该学说捆绑包当前不允许您设置报价策略,因此实现此目的的最清洁方法是增加学说捆绑中定义的当前服务。

  1. 创建一个压倒式编译器通行证。
  2. 启用编译器通过您的捆绑包。

我没有时间对此代码进行充分测试,但是完成后看起来非常像这样...

#mybundle/disporencyInjection/Compiler/doctrinequotestrategycompilerpass.php

<?php
namespace MyBundleDependencyInjectionCompiler;
use SymfonyComponentDependencyInjectionCompilerCompilerPassInterface;
use SymfonyComponentDependencyInjectionContainerBuilder;
use SymfonyComponentDependencyInjectionDefinition;
use SymfonyComponentDependencyInjectionReference;
class DoctrineQuoteStrategyCompilerPass extends CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        // Create a new service out of the ANSI quote strategy.
        $ansiQuoteStrategy = new Definition(
            'Doctrine\ORM\Mapping\AnsiQuoteStrategy'
        );
        $container->setDefinition('doctrine.ansi_quote_strategy', $ansiQuoteStrategy);
        // Add this to orm configuration calls.
        $definition = $container->getDefinition('doctrine.orm.default_configuration');
        $definition->addMethodCall('setQuoteStrategy', array(new Reference('doctrine.ansi_quote_strategy')));
    }
}

mybundle/mybundlebundle.php (*bundle.php in Bundle Directory)

<?php
use MyBundleDependencyInjectionCompilerDoctrineQuoteStrategyCompilerPass;
class MyBundleBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        ...
        $container->addCompilerPass(new DoctrineQuoteStrategyCompilerPass());
    }
}

警告

此代码假定您在某处有自己的应用程序捆绑包(这是最佳实践)。它还假设您只有一个实体经理定义,这是最可能的。如果不是这种情况,则必须使用适当的实体管理器名称(将"默认"更改为" myName")。

相关内容

  • 没有找到相关文章

最新更新