Come costruire una AND condition contenente vari OR?

L’utente supremo, quello pagante, chiede di poter cercare un prodotto per codice (anche parziale) o per EAN. E ne passa un certo tot, non uno solo

dovrei montare una condizione del tipo




WHERE 

 ... condizioni già in corso ...

 AND (

    (ean = 'A' or codice_prodotto like "%A%") 

    OR

    (ean = 'B' or codice_prodotto like "%B%") 

    OR

    (ean = 'C' or codice_prodotto like "%C%") 

    ...

 )

 



Il tutto lo vorrei mettere, ovviamente, in un parameterized named scope tipo




public function by_ean_or_code($searched_terms)

{

   $conditions = $this->getDbCriteria();


    foreach($searched_terms as $searched) {

      . ...  e mo <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' /> ...

    }




   return $this;

}



Come si fa? Come creo una serie di OR concatenati e poi li do in pasto come una unica AND ?

Cioè intende cercare da un unico campo sia un cod prodotto che un ean ?

no, i campi sono diversi, è che a livello html avrò un unica textarea dove l’uTONTO potrà inserire sia EAN sia codici prodotto ‘interni’ dell’azienda (oltretutto questi devono poter essere parziali, quindi si va di gran LIKE)

Crea un attributo nel model tipo


public $eanAndProduct

poi nel metodo search potresti fare così:




$criteria->select=array(

  "*", 

  "CONCAT(ean, ' ', prodotto) AS eanAndProduct"

);

  etc etc etc....

$criteria->compare('eanAndProduct',$this->eanAndProduct,true);



In questo modo visulizzerai sia il cod ean che il nome prodotto nella griglia e potrai filtrarli come richiesto.

Io ho utilizzato AND ma nulla vieta LIKE o OR.

Chiaramente column attribute nella gridView dovrà essere eanProduct

Questo è geniale, grazie per la dritta