【发布时间】:2016-06-17 10:47:37
【问题描述】:
我正在使用 Laravel 5.2 创建一个通用搜索功能,我想显示所有出现搜索关键字的书籍:书名、书名、书的情节、书的作者姓名、书的作者姓氏; 我认为这段代码会起作用:
$results = Book::whereHas('author', function ($query) use ($keyword)
{
$query->where('surname', 'LIKE', '%'.$keyword.'%')
->orWhere('name', 'LIKE', '%'.$keyword.'%');
})
->orWhere('title', 'LIKE', '%'.$keyword.'%')
->orWhere('plot', 'LIKE', '%'.$keyword.'%')
->orWhere('subject', 'LIKE', '%'.$keyword.'%')
->get();
但是当我使用作者的名字作为关键字时,我会得到整个库的结果。 相反,如果我输入作者的姓氏,它就可以完美地工作。
我发现了这个解决方案,我认为这不是最佳的,但至少它有效:
$results = Book::whereHas('author', function ($query) use ($keyword)
{
$query->where('surname', 'LIKE', '%'.$keyword.'%');
})
->orWhereHas('author', function ($query) use ($keyword)
{
$query->where('name', 'LIKE', '%'.$keyword.'%');
})
->orWhere('title', 'LIKE', '%'.$keyword.'%')
->orWhere('plot', 'LIKE', '%'.$keyword.'%')
->orWhere('subject', 'LIKE', '%'.$keyword.'%')
->get();
有什么建议吗? 提前感谢您的帮助!
【问题讨论】:
-
也许为搜索(关键字)创建一些额外的索引表?如果你想要“一些”速度,请使用 redis 而不是 mysql。
-
@Hardy 感谢您的建议,但实际上只是学校的一个项目;自从发现了laravel这个有趣的行为,我就想知道原因,仅此而已。