문제

Magento 검색 결과를 수정하여 일치하는 카테고리, 페이지 및 블로그 게시물 (Neotheme 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)
                    )
             )
.

를 보여주는 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.필드 배열 및 조건의 배열을 전달합니다.동일한 키가있는 이러한 배열의 요소는 단일 매개 변수로 전달 된 것처럼 처리됩니다.

다른 팁

다음과 같이 시도 했습니까?

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

추신 : SQL 주입

에 대해 걱정해야합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top