我正在修改Magento搜索结果,包括匹配类别,页面和博客文章(来自NeoTeme Nblog的免费版)。虽然类别和页面正好正常,但博客帖子有一些非常奇怪的事情。该帖子似乎存储在平坦的非EAV表中。

当我这样做时,搜索“测试”:

$needleSearch = "test";
$posts = Mage::getModel("neotheme_blog/post")
                ->setStoreId($storeId)
                ->getCollection()
                ->addStoreFilter()
                ->addStatusFilter(NeoTheme_Blog_Model_Post::STATUS_ACTIVE)
                ->addPublishFilter()
                ->addFieldToFilter(
                    array(
                        array("attribute"=>"title","like"=>$needleSearch),
                        array("attribute"=>"author","like"=>$needleSearch),
                        array("attribute"=>"summary","like"=>$needleSearch)
                    )
                  ) //OR BIT
                ;
.

生成的选择查询在中间的中间结束:

((`title`.`%test%` = '') OR (`author`.`%test%` = '') OR (`summary`.`%test%` = ''))
.

嵌套阵列为或适用于EAV(类别和页面)。

这也产生相同的结果:

            ->addFieldToFilter(
                    array(
                        array("title","like"=>$needleSearch),
                        array("author","like"=>$needleSearch),
                        array("summary","like"=>$needleSearch)
                    )
             )
.

将array()围绕类似于显示

的SQL查询结束
...(`title`.`array` = '') OR...
.

单一的工作:

$posts = Mage::getModel("neotheme_blog/post")
                ->setStoreId($storeId)
                ->getCollection()
                ->addStoreFilter()
                ->addFieldToFilter( 'title', array('like'=>$needleSearch) )
;
.

我想知道是否有人对可能发生的事情有什么看法?我无法在模块中找到addfieldtofilter()覆盖。

感谢

有帮助吗?

解决方案

不同字段的条件组合或为:

->addFieldToFilter(
    array(
        'title',
        'author',
        'summary'
    ),
    array(
        array('like' => $needleSearch),
        array('like' => $needleSearch),
        array('like' => $needleSearch),
    )
);
.

i.e。传递一系列字段A和条件数组。具有相同密钥的这些阵列的元素将被视为它们作为单个参数传递。

其他提示

你试过这样的东西吗?

$collection
    ->getSelect()
    ->where("(something like 'abc') OR (something_else LIKE 'doremi')");
.

ps:您应该担心SQL注入

许可以下: CC-BY-SA归因
scroll top