Laravel中如何拼接uploadDate与uploadTime列实现LIKE模糊查询?
解决方案:拼接字段实现跨列模糊查询
当然可以!不用修改数据库结构,直接在Laravel查询构造器里通过数据库的字符串拼接函数,把uploadDate和uploadTime合并成符合你搜索格式的字符串,就能匹配到yyyy-mm-dd, hh:mm:ss格式的搜索值了。
针对MySQL/MariaDB的写法
用CONCAT函数拼接两个字段,注意要加上搜索值里的, 分隔符,推荐用whereRaw结合参数绑定的写法(更安全,避免SQL注入):
->orWhereRaw("CONCAT(uploadDate, ', ', uploadTime) LIKE ?", ['%' . $request->search . '%'])
如果你习惯用orWhere搭配DB::raw,也可以这么写:
->orWhere(DB::raw("CONCAT(uploadDate, ', ', uploadTime)"), 'like', '%' . $request->search . '%')
针对PostgreSQL的写法
PostgreSQL支持CONCAT函数,也支持||拼接运算符,两种写法都可行:
// 用CONCAT函数 ->orWhereRaw("CONCAT(uploadDate, ', ', uploadTime) LIKE ?", ['%' . $request->search . '%']) // 用||运算符 ->orWhereRaw("(uploadDate || ', ' || uploadTime) LIKE ?", ['%' . $request->search . '%'])
为什么原来的写法查不到?
你之前的查询是分别对uploadDate和uploadTime做模糊匹配,但当搜索值是完整的yyyy-mm-dd, hh:mm:ss时,uploadDate字段里没有时间部分,uploadTime字段里没有日期部分,自然找不到匹配的结果。拼接后相当于把两个字段合并成了一个符合搜索格式的字符串,就能精准匹配啦。
内容的提问来源于stack exchange,提问作者Ray Smith
相关产品推荐
相关产品推荐

