Laravel красноречивые данные без учета регистра - PullRequest
1 голос
/ 06 февраля 2020

У меня есть таблица в миграциях с именем 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   |
....................
....................

Что я хочу: Каждое действие (validation, insert, search) с этим полем code будет нечувствительным. Я могу управлять с контроллера таким количеством строк кода. Могу ли я сделать это по красноречивой модели?

1 Ответ

1 голос
/ 06 февраля 2020

Ваши поисковые запросы и правила проверки не учитывают регистр, когда вы используете mysql.

, например:

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

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

Если вы хотите, чтобы ваш коды, которые всегда должны храниться в верхнем регистре, вы можете использовать мутатор .

из документов:

Чтобы определить мутатор, определите метод setFooAttribute в вашей модели где Foo - это «странное» имя столбца, к которому вы получите доступ sh. Итак, еще раз, давайте определим мутатор для атрибута first_name. Этот мутатор будет вызываться автоматически, когда мы попытаемся установить значение атрибута 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...