2011-11-18 21 views
0

我想用四個搜索詞建立一個搜索。我正在使用Kohana 3.0.7並使用ORM。在普通的SQL中,我可以檢查是否設置了特定字段並將其添加到查詢中。我的查詢如下 -在kohana 3.0和ORM中使用多個輸入搜索

$search_sql = "Select E.*, B.* 
         from events as E 
         INNER JOIN businesses as B 
         on E.business_id = B.id 
         "; 
     if(!empty($date_term)) { 
     $search_sql .=" where E.start_time like '%".$date_term."%'"; 
     } 
     else { 
     $search_sql .=" where E.start_time like '".date('Y-m-d')."%'"; 
     } 
     if(!empty($keyword_term)) {   
      $search_sql .=" AND E.title like '%".$keyword_term."%'"; 
       $search_sql .=" OR B.description like '%".$keyword_term."%'"; 
        } 
     if(!empty($location_term)) { 
      $search_sql .=" AND B.city like '%".$location_term."%'"; 
      $search_sql .=" OR B.state like '%".$location_term."%'"; 
     } 
     if(!empty($zip_term)) { 
      $search_sql .=" AND B.zip_code like '%".$zip_term."%'"; 
     } 

如果我運行此查詢作爲

   $query = DB::query(Database::SELECT,$search_sql); 
       $res_query = $query->execute(); 

我不能,如果我在ORM方式運行此查詢訪問對象和它的方法,我可以返回。但是我無法檢查這些字段並將它們添加到查詢中。

回答

0

你有沒有嘗試過這樣的:

$query = DB::query(Database::SELECT,$search_sql); 
$res_query = $query->as_object()->execute(); 

你也不必使用純SQL本 - ORM或查詢生成器也可以做到這一點(編輯以有ORM對象返回):

$query = ORM::factory('event') 
      ->join(array('businesses', 'B'), 'INNER') 
      ->on('event.business_id', '=', 'B.id') 
      ->where_open(); 

    if(!empty($date_term)) { 
     $query->where('event.start_time', 'LIKE', '%' . $date_term . '%'); 
    } 
    else { 
     $query->where('event.start_time', 'LIKE', date('Y-m-d') . '%'); 
    } 

    if(!empty($keyword_term)) { 
     $query->where_open(); // Add brackets, don't know if needed 
     $query->where('event.title', 'LIKE', '%' . $keyword_term . '%'); 
     $query->or_where('B.description', 'LIKE', '%' . $keyword_term . '%'); 
     $query->where_close(); 
    } 

    if(!empty($location_term)) { 
     $query->where_open(); // Add brackets, don't know if needed 
     $query->where('B.city', 'LIKE', '%' . $location_term . '%'); 
     $query->or_where('B.state', 'LIKE', '%' . $location_term . '%'); 
     $query->where_close(); 
    } 

    if(!empty($zip_term)) { 
     $query->where('B.zip', 'LIKE', '%' . $zip_term . '%'); 
    } 
    $query->where_close()->find_all(); 
+0

我會試試這個並更新回來。謝謝:) – KutePHP

+0

' - > as_object()'只返回一個對象,而不是ORM模型。你需要' - > as_object('event')'例如,但我不認爲它會起作用。 – biakaveron

+0

現在應該很容易切換到ORM代碼(編輯我的答案),因爲你可以混合使用ORM與查詢生成器:) – matino