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
要实现这一目标,您将不得不使用服务容器弄脏和肮脏。该学说捆绑包当前不允许您设置报价策略,因此实现此目的的最清洁方法是增加学说捆绑中定义的当前服务。
- 创建一个压倒式编译器通行证。
- 启用编译器通过您的捆绑包。
我没有时间对此代码进行充分测试,但是完成后看起来非常像这样...
#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")。