Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.

UPPERCASE сохранение в бд?

Можно ли каким нибудь способом, указать чтобы все сохранялось как UPPERCASE?

Пропустили момент, и в базу льются разные регистры. Прогнать базу на апперкейс можно, но есть ли простые средства может прямо в Yii или как? или только указывать в SQL запросе UPPERCASE при сохранении?



Как вообще у вас обстоят с этим дела?
  • Вопрос задан
  • 3433 просмотра
Пригласить эксперта
Ответы на вопрос 4
@rPman
Если у тебя varchar или text то при сравнениях регистр будет игнорироваться, так что по уму достаточно при выводе везде добавить uppercase.
p.s. а тригером на изменение, некрасиво но действенно.
Ответ написан
@cat_crash
Из очевидных решений
1. Написать Триггер для SQL. Я так предпологаю что вы используете MySQL. Пример
2. Написать behavior для Yii который будет конвертировать в UPCASE все перед сохранением.
protected beforeSave()
{
$result=parent::beforeSave();

$result=strtoupper($result); //Ну или mb_strtoupper

return $result;
}
Ответ написан
XAKEPEHOK
@XAKEPEHOK
И есть еще вариант: сохранять в любом регистре, а при выборке перекрывать afterFind
protected function afterFind() {
    parent::afterFind();
    $this->field = strtoupper($this->field);
}
Ответ написан
@softarts
Соорудил конструкцию, просто пример таблицы с валютами ( надо по ISO код валюты хранить, он же short_name):

1. БД

CREATE TRIGGER currency_ucase_insert BEFORE INSERT ON currency FOR EACH ROW
SET NEW.short_name = UPPER(NEW.short_name);

CREATE TRIGGER currency_ucase_update BEFORE UPDATE ON currency FOR EACH ROW
SET NEW.short_name = UPPER(NEW.short_name);


2. Модель yii.
У меня:
class Currency extends \yii\db\ActiveRecord

добавил метод:
/*
     * Капсим сокращение валют
     */
    public function afterFind()
    {
        parent::afterFind();
        $this->short_name = strtoupper($this->short_name);
    }


3. Поле ввода

echo $form->field(
    $model,
    'short_name'
)->textInput([
    'maxlength' => true,
    'style'     => 'text-transform: uppercase',
]);

Вроде всё класс
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы