在列 Laravel 5.4 中应用字符串函数

Applying string function in column Laravel 5.4

我用的是最新的Laravel 5.4

我正在尝试进行一个简单的查询以按名称搜索用户。为 MySQL 编写的查询如下所示:

SELECT *
FROM users
WHERE upper(name) LIKE '%FOO%';

我正在努力让它与 Eloquent 一起工作。我尝试过但失败的事情:

  1. User::where('upper(name)', 'LIKE', '%FOO%')->get()

  2. DB::table('users')->where('upper(name)', 'LIKE', '%FOO%')->get()

两者均失败并出现以下错误:

Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'upper(name)' in 'where clause' (SQL: select * from users where upper(name) LIKE %FOO%)'

查询似乎失败了,因为 Eloquent 用反引号(“`”、“`”)包裹了 upper(email) 语句。有没有办法解决这个问题,或者我是否必须使用特定的 eloquent 函数将列转换为大写、小写、e.t.c?

您可以在 laravel 中使用 whereRaw() 来实现此目的:

  User::whereRaw("upper(name) LIKE '%FOO%'")
                   ->get();

使用DB::raw()

User::where(DB::raw('upper(name)'), 'LIKE', '%FOO%')->get()

它会生成这样的查询

"select * from `users` where upper(name) LIKE ?"