2011-09-23 5 views
11

Alors, comment spécifier le moteur de stockage à utiliser pour une entité donnée dans Doctrine 2?Spécifiez le type de table/moteur de stockage dans Doctrine 2

Je crée une table qui nécessite un index de texte intégral et seul le moteur de stockage MyISAM prend en charge l'indexation de texte intégral dans MySQL.

D'un côté: il semble que Doctrine 2 ne supporte pas l'indexation de texte en texte intégral. Ni les recherches en texte intégral? Est-ce exact?

+1

Il ne peut pas être « possible » sans source d'édition: http://www.doctrine-project.org/jira/browse/DDC-972 –

+0

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

+0

@Jared J'ai pensé autant ... merci pour le lien de billet. –

Répondre

6

Mise à jour:

Voir le commentaire à ajouter "@Table (name =" nom_table "options = { "moteur"= "MyISAM"})", il est la meilleure réponse.

======= originale ci-dessous ===========

Ce code non testé est destiné à vous aider à obtenir une réponse, vous aurez besoin de lire beaucoup de Doctrine2 code pour comprendre ce que vous voulez bien. J'ai passé environ 30 minutes à lire du code et je n'ai pas pu trouver un moyen de pousser le tableau $ options à travers la couche ORM vers cette fonction de couche DBAL.

Doctrine/check out Dbal/Plateformes/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   } 

essaient de coder en dur what engine veulent là-dedans. Il cassera presque certainement des choses bien (par exemple, les clés étrangères dont work in MyISAM)

+13

Vous pouvez définir cela pour une table en utilisant '@Table (name =" nom_table ", options = {" engine "=" MyISAM "})' –

+1

@PaulJacobse vous devriez signaler cela comme une réponse –

1

Si vous utilisez les migrations Doctrine2 ..

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

Je suis deux ans trop tard, mais en sachant ce qui est important car il ISN « t établis pour justifier une raison quelconque, nous avons du mal à y parvenir, mais cela est la solution

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

s'il vous plaît seulement remarquer le options = {"moteur": "MyISAM"} –

+1

c'est utile en 2015. Il n'est pas en retard ... – Dennis

+0

Merci, je ne sais pas pourquoi ce n'est pas marqué comme la réponse, bizarre. –