Kohana 3 ORM - группировка, где условия с круглыми скобками - PullRequest
6 голосов
/ 12 июня 2010

Я пытаюсь выполнить запрос через ORM следующим образом:

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

Вот что у меня есть:

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

Но это не учитывает скобки. Есть идеи?

Ответы [ 3 ]

8 голосов
/ 12 июня 2010

Найден ответ.

Это делается с помощью методов Kohana where_open () и where_close ().

7 голосов
/ 18 мая 2012

У меня работает нормально.

Пример кода ORM

$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();

создаст SQL-запрос

SELECT `user_musics`.* FROM `user_musics` WHERE (`title` LIKE '%as%' OR `album` LIKE '%as%' OR `artist` LIKE '%as%') AND `app_userid` = '21'
0 голосов
/ 20 июня 2011

Не удалось заставить форматирование кода работать в комментарии - просто подумал, что добавлю в ответ простой пример на случай, если кто-нибудь еще столкнется с ним:

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

выдаст следующий SQL:

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