【发布时间】:2017-02-28 18:09:33
【问题描述】:
我正在使用基于 Laravel 的 OctoberCMS。
我有一个 html 搜索字段,其中查询字符串是用 php 解析的。
Laravel 使用 MySQL WHERE LIKE 根据 url tag 参数返回数据库结果。
它适用于 1 个标签,但如何返回匹配多个标签的结果,以逗号或空格分隔?
HTML5 搜索输入
<form action="/search">
<input type="search" name="tags" multiple>
<button type="submit">search</button>
</form>
单标签搜索
localhost/search?tags=galaxy
多标签搜索
逗号
localhost/search?tags=galaxy%2C+stars%2C+universe
空间
localhost/search?tags=galaxy+stars+universe
这应该返回在数据库表的标签列中匹配的任何标签。
问题在于它将查询视为galaxy AND stars AND universe 而不是单个标签:galaxy、stars、universe。
搜索结果
$query_string = $tags = '';
$query_string = getenv('QUERY_STRING');
// Return search results matching query string
return $query->where('tags', 'like', "%$tags%");
$query 是 OctoberCMS 的一部分。
示例
问题
【问题讨论】:
-
我不明白:“任何”还是“全部”?标签如何存储在数据库中?
$query是什么?你的问题到底是什么? -
@PaulSpiegel 现在如果我输入“galaxy, stars”。它将查询视为“galaxy + stars”而不是单个标签。我会改写。标签存储在表“画廊”和列“标签”中。图像位于“名称”列中。我正在使用 OctoberCMS,它需要 $query,作为 Query Builder 插件的一部分。我会更新问题。
-
您可以使用explode() function 来拆分字符串。另请注意,
'%$tags%'不会像您预期的那样工作。您应该使用双引号:"%$tags%"。我无能为力 - 没有足够的信息(表格、关系、..)。 -
@PaulSpiegel 如果我将 $tags 分解为一个数组,那么我如何让 mysql 在该列中搜索 $tags 数组中的匹配项?我还用另一张图片更新了这个问题。
标签: php html mysql laravel laravel-5