Specify the table type/storage engine in Doctrine 2

后端 未结 3 859
悲哀的现实
悲哀的现实 2021-02-05 15:22

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

相关标签:
3条回答
  • 2021-02-05 15:58

    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
    {
    
    0 讨论(0)
  • 2021-02-05 15:58

    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)

    0 讨论(0)
  • 2021-02-05 16:22

    If you're using doctrine2 migrations ..

    $table = $schema->createTable('user');
    $table->addColumn('id', 'integer');
    $table->addOption('engine' , 'MyISAM');
    $table->setPrimaryKey(array('id'));
    
    0 讨论(0)
提交回复
热议问题