【问题标题】:Laravel eloquent case insensitive dataLaravel 雄辩的不区分大小写的数据
【发布时间】:2020-02-06 09:03:42
【问题描述】:

我有一个名为 currency_codes 的迁移表,其中包含字段 (id, source, code)

我还有一个型号名称CurrencyCode.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CurrencyCode extends Model
{
    protected $table = 'currency_codes';
    protected $fillable = ['source', 'code'];
}

来自数据库的一些数据:

+------------------+
|id |source  |code |
--------------------
|1  |USA     |Usd  |
|2  |UAE     |AED  |
|3  |CHINA   |cny  |
|4  |opskins |OP   |
|5  |MyWeb   |wp   |
....................
....................

我想要什么: 带有此 code 字段的每个操作 (validation, insert, search) 都将是不敏感的。我可以用这么多行代码从控制器进行控制。我可以通过 eloquent 模型来做到这一点吗?

【问题讨论】:

  • 我不明白你的问题,你能详细说明你想做什么吗?
  • 我想查询code不区分大小写。喜欢:我会写where('code', '=', $inputCode),它会不敏感地搜索。有什么方法可以操纵 eloquent 模型?
  • 您是否尝试过您的查询?如果您使用的是 mysql,它应该不区分大小写。
  • 它适用于 mysql。如果我想检查 code 字段的唯一验证怎么办?
  • 刚刚使用unique 规则对其进行了测试,它适用于我,它不区分大小写。

标签: laravel eloquent


【解决方案1】:

当您使用 mysql 时,您的搜索查询和验证规则不区分大小写。

例如:

$query->where('code', $code)

'code' => 'unique:currency_codes,code'

如果您希望您的代码始终以大写形式存储,您可以使用mutator

来自文档:

要定义一个 mutator,在你的模型上定义一个 setFooAttribute 方法 其中 Foo 是您希望访问的列的“研究”大小写名称。 所以,再一次,让我们为 first_name 属性定义一个 mutator。这个 当我们尝试设置值时,mutator 将被自动调用 模型上的 first_name 属性:

class User extends Model
{
    /**
     * Set the user's first name.
     *
     * @param  string  $value
     * @return void
     */
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }
}

所以在你的情况下:

/**
 * Set the currency code.
 *
 * @param  string  $value
 * @return void
 */
public function setCodeAttribute($value)
{
    $this->attributes['code'] = strtoupper($value);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多