Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specify the table type/storage engine in Doctrine 2

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?

like image 495
Matt Wonlaw Avatar asked Sep 23 '11 01:09

Matt Wonlaw


2 Answers

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
{
like image 168
Gabriel ThaKid Avatar answered Sep 21 '22 02:09

Gabriel ThaKid


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)

like image 32
Mike Graf Avatar answered Sep 19 '22 02:09

Mike Graf