addFieldToFilter () 또는 '홀수가 아닌 데이터에 대한 쿼리 이상
-
13-12-2019 - |
문제
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 주입
에 대해 걱정해야합니다제휴하지 않습니다 magento.stackexchange