2010-06-12 5 views
6

Je suis en train d'exécuter une requête par l'ORM comme ceci:Kohana 3 ORM - regroupement où les conditions avec parenthèses

SELECT * from table where (fname like 'string%' or lname like 'string%') 
AND (fname like 'string2%' or lname like 'string2%'); 

Voici ce que j'ai jusqu'à présent:

$results = ORM::factory('profiles'); 
foreach ($strings as $string) { 
    $result->where('fname', 'like', "$string%"); 
    $result->or_where('lname', 'like', "$string%"); 
} 

Mais ce doesn Ne tenez pas compte des parenthèses. Des idées?

Répondre

8

J'ai trouvé la réponse. C'est fait avec les méthodes where_close() et where_close() de Kohana.

+0

Désolé DexterW, je downvoted par mégarde votre réponse et maintenant il ne me laisse pas défaire les downvote ... –

0

Impossible d'obtenir le code formatage pour travailler dans le commentaire - Je pensais juste que je rajouterais un exemple simple à la réponse au cas où quelqu'un d'autre vient à travers elle:

$query = DB::select() 
      ->from('some_table') 
      ->where_open() 
      ->where('column_one', '=', 1) 
      ->or_where('column_two', '=', 2) 
      ->where_close(); 

produirait l'instruction SQL suivante:

SELECT * FROM some_table 
WHERE (column_one = 1 OR column_two = 2); 
7

Cela fonctionne très bien pour moi.

code ORM exemple

$musicslist = ORM::factory('user_music') 
      ->where_open() 
      ->where('title', 'like', '%' . $search . '%') 
      ->or_where('album', 'like', '%' . $search . '%') 
      ->or_where('artist', 'like', '%' . $search . '%') 
      ->where_close() 
      ->and_where('app_userid','=', $userid) 
      ->find_all(); 

il va créer requête SQL

SELECT `user_musics`.* FROM `user_musics` WHERE (`title` LIKE '%as%' OR `album` LIKE '%as%' OR `artist` LIKE '%as%') AND `app_userid` = '21'