2010-06-12 12 views
6

Tôi đang cố gắng để chạy một truy vấn thông qua các ORM như thế này:Kohana 3 ORM - nhóm nơi có điều kiện với dấu ngoặc

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

Dưới đây là những gì tôi có cho đến nay:

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

Nhưng doesn này 't tài khoản cho các dấu ngoặc đơn. Bất kỳ ý tưởng?

Trả lời

8

Tìm câu trả lời.

Được thực hiện bằng phương thức where_open() và where_close() của Kohana.

+0

Xin lỗi DexterW, tôi vô tình downvoted câu trả lời của bạn và bây giờ nó sẽ không cho phép tôi lùi lại downvote ... –

0

Không thể lấy mã định dạng để làm việc trong các bình luận - chỉ cần nghĩ rằng tôi muốn thêm một ví dụ đơn giản để câu trả lời trong trường hợp bất cứ ai khác đi qua nó:

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

sẽ tạo ra các SQL sau:

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

Nó hoạt động tốt cho tôi.

mẫu mã 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(); 

nó sẽ tạo ra truy vấn SQL

SELECT `user_musics`.* FROM `user_musics` WHERE (`title` LIKE '%as%' OR `album` LIKE '%as%' OR `artist` LIKE '%as%') AND `app_userid` = '21' 
Các vấn đề liên quan