【问题标题】:Symfony2 and Match Against, table InnoDBSymfony2 和 Match Against,表 InnoDB
【发布时间】:2013-07-11 12:52:20
【问题描述】:

我在使用 symfony2 实现 Match Against 时遇到了问题,但由于 stackoverflow 我几乎解决了这个问题: MATCH AGAINST script is not working with Symfony2

我按照 Picoss 说的做了,但现在我有另一个问题:

SQLSTATE[HY000]: 一般错误: 1214 The used table type doesn't 支持全文索引

在谷歌上进行一些搜索后,我认为原因是因为 InnoDB 表类型,但我不知道如何在 Symfony2 中更改它(我必须在 fosuserbundle 实体生成的表上搜索某些内容。第二种解决方案可以升级我的mysql版本(我其实是在5.1.66-0版本,但不知道能不能解决问题)。

您还有其他想法吗?

谢谢

【问题讨论】:

  • 跟Symfony2没有关系,应该把表定义改成MyISAM引擎。

标签: symfony doctrine innodb full-text-search


【解决方案1】:

您可以在@ORM/Table 定义中添加引擎选项:

对于注释:

<?php

namespace My\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * MyEntity
 *
 * @ORM\Table(name="my_entity", options={"engine"="MyISAM"})
 * @ORM\Entity(repositoryClass="My\Bundle\Entity\Repository\MyEntityRepository")
 */
class MyEntity
{
    //...
}

希望对你有帮助

【讨论】:

  • 感谢您的回答,但添加该选项后,我执行了“php app/console dictionary:schema:update --force”,但没有任何内容需要更新 - 您的数据库已经与当前数据库同步实体元数据。我必须删除数据库并重建它吗?
  • 谢谢,但我必须这样做:ALTER TABLE uvaluo_user ADD FULLTEXT(firstname, lastname); ORM 有注释方式吗?
【解决方案2】:

Doctrine 有办法做到这一点:

/**
 * @ORM\Table(name="your_table_name", indexes={@ORM\Index(name="escape", columns={"name"}, flags={"fulltext"})})
 * @ORM\Entity(repositoryClass="...\YourRepository")
 */
class YourEntity extends SomeClass {

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 2012-03-15
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多