问题
So how can one specify the storage engine to use for a given entity in Doctrine 2?
I'm creating a table that needs a full text index and only the MyISAM storage engine supports full text indexing in MySQL.
As a side: it looks like Doctrine 2 doesn't support full text indexing out of the box? Nor full text searches? Is that correct?
回答1:
I'm two years too late, but knowing this is important since it isn't documented for some reason, we have been struggling to achieve this but this is the solution
/**
* ReportData
*
* @ORM\Table(name="reports_report_data",options={"engine":"MyISAM"})
* @ORM\Entity(repositoryClass="Jac\ReportGeneratorBundle\Entity\ReportDataRepository")
*/
class ReportData
{
回答2:
Update:
See the comment about adding "@Table(name="table_name",options={"engine"="MyISAM"})" , it is the better answer.
======= Original Below ===========
This is untested code aimed to help you get to an answer, you will need to read a lot of Doctrine2 code to figure out what you want though. I spent about 30mins reading code and couldnt find a way to push the $options array through the ORM layer to this DBAL layer function.
check out Doctrine/DBAL/Platforms/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 }
try hard coding what engine want in there. It will almost certainly break stuff though (eg, foreign keys dont work in MyISAM)
回答3:
If you're using doctrine2 migrations ..
$table = $schema->createTable('user');
$table->addColumn('id', 'integer');
$table->addOption('engine' , 'MyISAM');
$table->setPrimaryKey(array('id'));
来源:https://stackoverflow.com/questions/7523182/specify-the-table-type-storage-engine-in-doctrine-2