addFieldToFilter() 'または'不適切な何かをしている非夕方データに関するクエリ

magento.stackexchange https://magento.stackexchange.com//questions/89201

  •  13-12-2019
  •  | 
  •  

質問

マゼント検索結果を変更して、マッチングカテゴリ、ページ、ブログ投稿(Neotheme Nblogの無料版から)を含めています。カテゴリとページはちょうど元に働いていますが、ブログの投稿と非常に奇妙なものがあります。投稿はフラットで非早く、テーブルのテーブルに保存されているようです。

これを行うときは、「テスト」を検索してください:

$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),
    )
);
.

すき。フィールドの配列を渡すために、条件の配列。同じキーを持つこれらのアレイの要素は、あたかもそれらが単一のパラメータとして渡されたかのように扱われます。

他のヒント

あなたはこのようなものを試しましたか?

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

PS:SQLインジェクションを心配する必要があります

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top