Domanda

Sto modificando i risultati della ricerca Magento per includere categorie, pagine e post di blog corrispondenti (dalla versione gratuita di NeotheMe Nblog).Mentre le categorie e le pagine stanno lavorando bene, c'è qualcosa di molto strano in corso con i post del blog.I post sembrano essere conservati in un tavolo, non-eav, tavolo.

Quando lo faccio, cercando "Test":

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

La query di selezione risultante finisce con questo nel mezzo:

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

L'array annidato per il valore o funziona bene per l'EAV (categorie e pagine).

Questo produce anche lo stesso risultato:

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

Mettere la matrice () intorno al bit simile termina con la query SQL che mostra

...(`title`.`array` = '') OR...
.

Un singolo lavoro simile:

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

Mi stavo chiedendo se qualcuno avesse avuto idea di cosa potrebbe andare avanti?Non riesco a trovare un override di addfelttofilter () nel modulo.

Grazie

È stato utile?

Soluzione

La sintassi corretta per combinare condizioni di diversi campi con o è:

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

I.e.Per passare una serie di campi e una serie di condizioni.Gli elementi di questi array con gli stessi tasti saranno trattati come se fossero passati come parametri singoli.

Altri suggerimenti

Hai provato qualcosa del genere?

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

PS: dovresti preoccuparti dell'iniezione SQL

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top