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
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
{
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)
If you're using doctrine2 migrations ..
$table = $schema->createTable('user');
$table->addColumn('id', 'integer');
$table->addOption('engine' , 'MyISAM');
$table->setPrimaryKey(array('id'));