Использование моделей в миграции

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Использование моделей в миграции

Сообщение PaSiS »

Есть миграция, модифицирующая текущую БД.
В процессе работы надо обработать данные в существующей таблице.
Хотел сделать это через обычное обращение к модели, но при запуске миграции всплывает Fatal Error - класс модели не найден.
Может я делаю что-то не так?

Код миграции:

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

use common\models\post\PostRecord;
use yii\db\Schema;
use yii\db\Migration;

class m150219_093610_alter_category extends Migration
{
    ...
    $posts = PostRecord::findAll();
    ...
} 
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Использование моделей в миграции

Сообщение lynicidn »

нельзя юзать модели в миграциях
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Использование моделей в миграции

Сообщение lynicidn »

атуальность данных в моделе и актуаьлность столбцов в таблице на данный момент не будт совпадать и ожидаемо что модель выкинет ошибку,н е ту что у вас, но выкинет - нет аттрибута, или нет соответствующей колонки или еще чего
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Использование моделей в миграции

Сообщение PaSiS »

lynicidn писал(а):нельзя юзать модели в миграциях
Ok. А как лучше тогда обработать данные именно во время миграции?
lynicidn писал(а):атуальность данных в моделе и актуаьлность столбцов в таблице на данный момент не будт совпадать и ожидаемо что модель выкинет ошибку,н е ту что у вас, но выкинет - нет аттрибута, или нет соответствующей колонки или еще чего
Структура таблицы, подключенной модели, как раз не меняется...
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Использование моделей в миграции

Сообщение lynicidn »

вот смотри
у меня еще нет таблицы, но есть модель
мне надо создать таблицу, обратившись к моделе я получу ошибку, схема не будет создана, аналогию с alter column додумай сам
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Использование моделей в миграции

Сообщение PaSiS »

lynicidn писал(а):вот смотри
у меня еще нет таблицы, но есть модель
мне надо создать таблицу, обратившись к моделе я получу ошибку, схема не будет создана, аналогию с alter column додумай сам
Здесь идет нарушение логики, мне же нужно собрать идентификаторы из таблицы, которую текущая миграция не затрагивает, и добавить их в создаваемую миграцией таблицу через insert (а не через $model = new newTbl(); ... $model->save()).

Вот тут у меня и вопрос: если обращаться к моделям из миграции нельзя, то как лучше организовать подобный процесс?
Пока только вижу вариант отдельного скрипта-обновления, со всеми методами и миграцией...
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: Использование моделей в миграции

Сообщение chungachguk »

я для таких целей делаю консольную команду
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Использование моделей в миграции

Сообщение ElisDN »

Либо через createCommand и foreach с $this->insert(), либо перенести из таблицы в таблицу одним запросом:

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

$this->execute('
    INSERT INTO {{%new_table}} (
        some_id,
        some_value,
        status
    )
    SELECT
        u.id,
        u.value,
        1
    FROM {{%old_table}} u
    ORDER BY u.id ASC
'); 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Использование моделей в миграции

Сообщение zelenin »

мда, советчиков налетело с непонятными советами.
Модели можно использовать только в путь. И если даже ты будешь изменять ту таблицу, модель которой используешь, никогда не выьбросится ошибка, что класс модели не найден. Ошибка у тебя в чем-то другом.
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Использование моделей в миграции

Сообщение xoma »

Имхо, но модели в миграциях лучше не использовать. Постепенно на модели навешаете поведения, которые вообще (или частично) не работают в консоли (обращаются к Yii::$app->user, например) и тогда все миграции отвалятся. Соглашусь с ElisDN, лучше взять "createCommand".
Ответить