6

我正在尝试通过 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%");
}

但这并没有考虑括号。有任何想法吗?

4

3 回答 3

8

找到了答案。

这是通过 Kohana 的 where_open() 和 where_close() 方法完成的。

于 2010-06-12T14:39:16.490 回答
7

这对我来说可以 。

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'
于 2012-05-18T11:15:15.880 回答
0

无法在评论中使用代码格式 - 只是想我会在答案中添加一个简单的示例,以防其他人遇到它:

$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);
于 2011-06-20T14:50:38.370 回答