首页 文章

PHP(Laravel 4)和PostgreSQL搜索

提问于
浏览
2

我有2个表“消息”和“用户”,结构如下:

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

不知道,如何循环获取每个“Hello”和“world”的搜索结果 . 另外如何放入连接并从users表中搜索first_name和last_name . 非常感谢帮助 .

2 回答

  • 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来提高搜索性能 . tutorial可以提供帮助,否则,您可以使用'database agnostic'方法作为答案 .

相关问题