【问题标题】:SQL Laravel Eloquent - Where field can be uppercase or lowercaseSQL Laravel Eloquent - 字段可以是大写或小写
【发布时间】:2021-06-11 03:04:16
【问题描述】:

$pname 可以是“Airbus”、“airbus”或“AIRBUS

$info = Plane::where('plane_name', '=', $pname)
                    ->where('uid', '=', $uid)
                    ->get();

有什么方法可以更新此查询以检查数据库中的飞机名称而不区分大小写?

【问题讨论】:

  • 如果您在 MySQL 配置中使用 unicode_ci,则不考虑区分大小写。如果你使用 unicode_bin 会区分大小写
  • 或者如果您无法更改排序规则,并且您的数据始终为小写,则将它们与小写输入进行比较。 strtolower($pname)
  • 在 MySQL 中,我实际上发现比较区分大小写比不区分大小写更难,因为区分大小写的排序规则并不常见。

标签: mysql sql laravel eloquent


【解决方案1】:

使用LOWERMYsql函数和strtolowerphp函数

$info = Plane::whereRaw('LOWER(plane_name) = (?)', [strtolower($pname)])
                    ->where('uid', '=', $uid)
                    ->get();

Plane::where('plane_name', 'ilike', $pname)->where('uid', '=', $uid)
                    ->get();

【讨论】:

    【解决方案2】:

    只需确保结果 where 子句为小写,查询子句也为小写。

    where(DB::raw('lower(column_name)'), '=', Str::lower($query))
    

    别忘了使用:

    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Str;
    

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 1970-01-01
      • 2016-05-19
      • 2012-06-13
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2021-11-05
      相关资源
      最近更新 更多