在Laravel 5.4列中应用字符串函数 [英] Applying string function in column Laravel 5.4
问题描述
我正在使用最新的Laravel 5.4
I'm using the latest Laravel 5.4
我正在尝试进行一个简单的查询来按名称搜索用户.为MySQL编写的查询如下所示:
I am trying to make a simple query to search users by name. The query written for MySQL looks like this:
SELECT *
FROM users
WHERE upper(name) LIKE '%FOO%';
我正在尝试使其与Eloquent一起使用.我尝试过但失败的事情:
I'm trying to make it work with Eloquent. Things I've tried but failed:
-
User :: where('upper(name)','LIKE','%FOO%')-> get()
DB :: table('users')-> where('upper(name)','LIKE','%FOO%')-> get()
均失败,并出现以下错误:
Both fail with the following error:
Illuminate \ Database \ QueryException,消息为'SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'upper(name)'(SQL:从*用户> 中选择*其中
upper(name)
LIKE%FOO%)'
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'upper(name)' in 'where clause' (SQL: select * from
users
whereupper(name)
LIKE %FOO%)'
查询似乎失败,因为Eloquent用反引号(`",`")包裹 upper(email)
语句.是否有办法解决此问题,还是我必须使用特定的雄辩函数将列转换为大写,小写等?
The query seems to fail because Eloquent wraps the upper(email)
statement with backticks (" ` ", " ` "). Is there a way to go around this issue or do I have to use a particular eloquent function to get convert a column to uppercase, lowercase, e.t.c?
推荐答案
使用 DB :: raw()
User::where(DB::raw('upper(name)'), 'LIKE', '%FOO%')->get()
它将生成这样的查询
"select * from `users` where upper(name) LIKE ?"
这篇关于在Laravel 5.4列中应用字符串函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!