【问题标题】:PHP (Laravel 4) and PostgreSQL searchPHP (Laravel 4) 和 PostgreSQL 搜索
【发布时间】:2014-03-07 11:45:55
【问题描述】:

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

users
id | first_name | last_name | ...


messages
id | subject | message | from_user | to_user

我想实现一个搜索功能,用户可以在其中搜索“Hello World”,结果将包括两个表中所有匹配的列,分别为 first_name、last_name、主题、“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”的搜索结果。还如何从用户表中加入并搜索 first_name 和 last_name。非常感谢帮助。

【问题讨论】:

  • 使用 ($userId, $keyword) 并且里面有 $keywords ?
  • @Svetlio 我的错,输入错误。更新了。

标签: php postgresql search laravel-4 eloquent


【解决方案1】:

由于您使用的是 PostgreSQL,请尝试使用 PostgreSQL 的full text search capabilities 来提高搜索性能。 tutorial 可以提供帮助,否则,您可以使用已回答的“数据库不可知论”方法。

【讨论】:

  • 谢谢。不知道这个。一定会试一试的。
【解决方案2】:

使用查询中已有的闭包,您可以轻松地在消息中搜索搜索字符串的所有关键字:

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

【讨论】:

    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2018-05-20
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多