No es implementado por Doctrina simplemente porque es demasiado plataforma de función.
Todo lo que necesita es implementar su propio QuoteStrategy.
Por ejemplo, para el proyecto Symfony:
Copiar y pegar proveedor AnsiQuoteStrategy
clase, cambie su nombre y hacer algo de citar:
AppBundle/ORM/QuoteStrategy.php
namespace AppBundle\ORM;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\ORM\Mapping as M;
class QuoteStrategy implements M\QuoteStrategy
{
private function quote($token, AbstractPlatform $platform)
{
// implement your quote strategy
switch ($platform->getName()) {
case 'mysql':
default:
return '`' . $token . '`';
}
}
// add quoting to appropriate methods
public function getColumnName($fieldName, M\ClassMetadata $class, AbstractPlatform $platform)
{
return $this->quote($class->fieldMappings[$fieldName]['columnName'], $platform);
}
// ... Rest methods
}
A continuación, registre su estrategia de cotización como un servicio:
src/AppBundle/Resources/config/services.yml
app.orm.quote_strategy:
class: AppBundle\ORM\QuoteStrategy
public: false
A continuación, utilizarlo para su configuración EntityManager:
app/config/config.yml
orm:
entity_managers:
default:
quote_strategy: app.orm.quote_strategy
Eso es todo :)
Acabo de descubrir que la doctrina DBAL se envía ahora con la herramienta cli \ Doctrine \ DBAL \ Tools \ Console \ Comma nd \ ReservedWordsCommand() que es realmente útil para escanear sus Entidades por cualquier cosa que pueda causar un problema. Intenta ejecutar "doctrine dbal: reserved-words" para probarlo. –
+1 Parece extraño que la creación de la tabla funcione bien. –
La doctrina de mi humilde opinión está rota aquí. En cualquier otro lugar donde el sistema no escape cosas para usted, se llamaría una vulnerabilidad de inyección SQL. – rjmunro