2014-02-10 67 views
2

我有2代表「信息」和「用戶」,結構如下所示:PHP(Laravel 4)和PostgreSQL搜索

users 
id | first_name | last_name | ... 


messages 
id | subject | message | from_user | to_user 

我想要實現搜索功能,其中用戶可以搜索例如「 Hello World「,結果將包括來自兩個表的所有匹配列,用於first_name,last_name,subject,」Hello「和」World「的消息。

我使用laravel 4,試圖做這樣的事情:

return Message::where(function($query) use ($userId, $keyword) 
       { 
        $query->where('subject', 'like', $keyword) 
          ->orWhere('message', '=', $keyword); 
       }) 
       ->where('is_deleted', '=', false) 
       ->orderBy('is_seen', 'asc')         
       ->paginate(20); 

不知道,如何循環得到的搜索結果爲每個「你好」和「世界」。還有如何在用戶表中加入並搜索first_name和last_name。非常感謝您的幫助。

+0

使用($ userId,$關鍵字)和裏面有$關鍵字? – Svetoslav

+0

@Svetlio我的壞,錯誤地鍵入。更新了。 – aiiwa

回答

0

你可以很容易地使用這個封閉你已經在查詢中搜索郵件的搜索字符串的所有關鍵字:

return Message::where(function($query) use ($userId, $searchString) 
       { 
        foreach(explode(' ', $searchString) as $keyword) 
        { 
         $query->where('subject', 'like', '%'. $keyword .'%') 
           ->orWhere('message', 'like', '%'. $keyword .'%'); 
        } 
       }) 
       ->where('is_deleted', '=', false) 
       ->orderBy('is_seen', 'asc')         
       ->paginate(20); 
3

既然你使用PostgreSQL,請嘗試使用PostgreSQL的full text search capabilities,以提高搜索性能。 A tutorial可以提供幫助,否則,您可以使用「數據庫不可知」方法進行回答。

+0

謝謝。不知道這個。會肯定地嘗試一下。 – aiiwa