2011-09-23 9 views
11

Entonces, ¿cómo se puede especificar el motor de almacenamiento que se usará para una entidad determinada en Doctrine 2?Especifique el tipo de tabla/motor de almacenamiento en Doctrine 2

Estoy creando una tabla que necesita un índice de texto completo y solo el motor de almacenamiento MyISAM admite la indexación de texto completo en MySQL.

Como un lado: parece que Doctrine 2 no admite la indexación de texto completo de la caja? ¿Ni búsquedas de texto completo? ¿Es eso correcto?

+1

puede que no sea 'posible' sin fuente de edición: http://www.doctrine-project.org/jira/browse/DDC-972 –

+0

También (1.1): http: // www. doctrine-project.org/documentation/manual/1_1/zh/defining-models:indexes:special-indexes –

+0

@Jared Pensé que ... gracias por el enlace del ticket. –

Respuesta

6

Actualización:

Ver el comentario sobre la adición de "@Table (name =" nombre_tabla "opciones = { "motor"= "MySQL"})", que es la mejor respuesta.

======= =========== original continuación

Este código está dirigido no probado para ayudarle a obtener una respuesta, que tendrá que leer una gran cantidad de Doctrine2 código para averiguar lo que quiere, sin embargo. Pasé unos 30 minutos leyendo el código y no pude encontrar una forma de insertar el array $ options a través de la capa ORM a esta función de capa DBAL.

de verificación a cabo Doctrina/DBAL/Plataformas/MySQLPlatform.php

427   // get the type of the table 
428   if (isset($options['engine'])) { 
429    $optionStrings[] = 'ENGINE = ' . $options['engine']; 
430   } else { 
431    // default to innodb 
432    $optionStrings[] = 'ENGINE = InnoDB'; 
433   } 

se esfuerzan codificación what engine quieren allí. Es casi seguro que romper cosas (por ejemplo, a pesar de las claves externas dont work in MyISAM)

+13

Puede configurar esto para una tabla usando '@Table (name =" table_name ", options = {" engine "=" MyISAM "})' –

+1

@PaulJacobse debe publicar esto como una respuesta –

1

Si está utilizando migraciones Doctrine2 ..

$table = $schema->createTable('user'); 
$table->addColumn('id', 'integer'); 
$table->addOption('engine' , 'MyISAM'); 
$table->setPrimaryKey(array('id')); 
20

estoy dos años de retraso, pero sabiendo que esto es importante, ya que ISN 't documentados por alguna razón, hemos tratado de lograr esto, pero esta es la solución

/** 
* ReportData 
* 
* @ORM\Table(name="reports_report_data",options={"engine":"MyISAM"}) 
* @ORM\Entity(repositoryClass="Jac\ReportGeneratorBundle\Entity\ReportDataRepository") 
*/ 
class ReportData 
{ 
+0

por favor solo tenga en cuenta el options = {"engine": "MyISAM"} –

+1

esto es útil en 2015. No es tarde ... – Dennis

+0

¡Gracias !, no sé por qué esto no está marcado como la respuesta, raro. –