Как переименовать столбец?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Как переименовать столбец?

Сообщение Brainfuck »

Допустим в базе хранится столбец как article_id, а я хочу его из кода использовать как articleId (без подчеркивания). Но переименовывать столбец в базе я не могу и не хочу. Есть какой-то способ это сделать через ORM? Я просто возлагал надежды на метод fields, но оказывается он работает только с toArray. Нужно что-то аналогичное. Если есть конечно...
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Как переименовать столбец?

Сообщение kawabanga »

set / get самый простой способ.
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Как переименовать столбец?

Сообщение Brainfuck »

kawabanga писал(а): 2019.03.06, 13:16 set / get самый простой способ.
Ну да - вариант... Только кода много. Особенно если не один атрибут хочешь переименовать. Для каждого по геттеру и сеттеру надо.
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Как переименовать столбец?

Сообщение kawabanga »

а иначе контролировать каждый запрос. в любом случае потратите много времени на хотелки свои.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Как переименовать столбец?

Сообщение someweb »

Перекройте магические __set и __get. Преобразуете articleId в article_id и вызываете parent.
Последний раз редактировалось someweb 2019.03.07, 09:35, всего редактировалось 1 раз.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Как переименовать столбец?

Сообщение someweb »

Примерно так, только в базе не должно быть имен столбцов, содержащих заглавные буквы.

Код: Выделить всё

class MyActiveRecord extends ActiveRecord
{
    public function __set($name, $value)
    {
        $name = strtolower(preg_replace('/[A-Z]/', '_$0', $name));
        parent::__set($name, $value);
    }

    public function __get($name)
    {
        $name = strtolower(preg_replace('/[A-Z]/', '_$0', $name));
        return parent::__get($name);
    }
}
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Ответить