我正在用Laravel 5.2创建一个通用搜索功能,并且我想要显示出现搜索关键字的所有书籍:书的标题,书的主题,书的情节,书的作者姓名,书的作者姓氏; 我认为这个代码将工作:Laravel multiple where where has has callback
$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
@ Hardy谢谢你的建议,但实际上只是一个学校的项目;自从我发现了拉拉维尔的这种有趣的行为之后,我想知道原因,无非就是如此。 – AskMan