【问题标题】:Applying string function in column Laravel 5.4在 Laravel 5.4 列中应用字符串函数
【发布时间】:2017-03-11 18:53:20
【问题描述】:

我使用的是最新的 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 函数来将列转换为大写、小写等?

【问题讨论】:

    标签: php laravel laravel-5 eloquent sql-like


    【解决方案1】:

    使用DB::raw()

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

    它会生成这样的查询

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这是否可以防止 SQL 注入,还是我需要手动转义传递的字符串?
      • 不。它也不反对 SQL 注入。
      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2017-12-07
      • 2018-08-11
      • 2016-04-19
      相关资源
      最近更新 更多