我正在为我的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
的替代方案吗?目前(正好我可以进行基本测试)我正在使用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();
答案 0 :(得分:5)
Doctrine不支持开箱即用的,真实的。但你可以:
答案 1 :(得分:1)
Doctrine2 ORM目前无法实现。由于Doctrine支持许多不同的数据库供应商,并且大多数供应商没有FULLTEXT
搜索功能,因此根本不受支持。
您始终可以使用Doctrine2 DBAL进行搜索。你失去了所有这些漂亮的orm功能,但在我的实践中,它们并不是搜索情况所需要的。