Как использовать MATCH в запросе к базе данных Symfony2 - PullRequest
3 голосов
/ 14 ноября 2011

Я создаю функцию поиска для своего проекта Symfony2 и написал для него SQL следующим образом:

SELECT dlc.title, dlc.description, dlc.keywords
FROM ShoutMainBundle:Dlc dlc
WHERE MATCH (dlc.title, dlc.description, dlc.keywords) AGAINST (":keyword" IN BOOLEAN MODE)
AND dlc.type = (":audio")
ORDER BY dlc.date DESC

Однако, когда я запускаю это в проекте, появляется следующая ошибка:

[Синтаксическая ошибка], строка 0, столбец 96: Ошибка: ожидаемая известная функция, получено 'MATCH'

Есть ли альтернатива, которую я мог бы использовать вместо MATCH?На данный момент (только для того, чтобы я мог провести базовое тестирование) я использую LIKE, но он не работает слишком хорошо, если для поиска используется более одного слова.

РЕДАКТИРОВАТЬ: Вот как код используется в коде:

    $em = $this->getDoctrine()->getEntityManager();

    $wckeyword = '%'.$skeyword.'%';

    $dlcresult = $em->createQuery('
        SELECT dlc.title, dlc.description, dlc.keywords
        FROM ShoutMainBundle:Dlc dlc
        WHERE MATCH (dlc.title, dlc.description, dlc.keywords) AGAINST (":keyword" IN BOOLEAN MODE)
        AND dlc.type = (":audio")
        ORDER BY dlc.date DESC'
    )->setParameters(array('type' => $stype, 'keyword' => $wckeyword));

    $dlcres = $dlcresult->getResult();

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011
1 голос
/ 14 ноября 2011

В настоящее время это невозможно с Doctrine2 ORM. Поскольку Doctrine поддерживает множество поставщиков баз данных, и большинство из них не имеют функции поиска FULLTEXT, она вообще не поддерживается.

Вы всегда можете использовать Doctrine2 DBAL для поиска. Вы теряете все эти отличные функции, но в моей практике они не так уж нужны в ситуациях поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...