Я новичок в Yii (Still Learning). Я следую учебному пособию, который я сделал, поскольку он был написан в книге, созданной новой миграцией
yiic migrate create create_issue_user_and_assignment_tables
и в safeup я написал этот запрос
$this->createTable('tbl_issue', array( 'id' => 'pk', 'name' => 'string NOT NULL', 'description' => 'text', 'project_id' => 'int(11) DEFAULT NULL', 'type_id' => 'int(11) DEFAULT NULL', 'status_id' => 'int(11) DEFAULT NULL', 'owner_id' => 'int(11) DEFAULT NULL', 'requester_id' => 'int(11) DEFAULT NULL', 'create_time' => 'datetime DEFAULT NULL', 'create_user_id' => 'int(11) DEFAULT NULL', 'update_time' => 'datetime DEFAULT NULL', 'update_user_id' => 'int(11) DEFAULT NULL', ), 'ENGINE=InnoDB'); //create the user table $this->createTable('tbl_user', array( 'id' => 'pk', 'username' => 'string NOT NULL', 'email' => 'string NOT NULL', 'password' => 'string NOT NULL', 'last_login_time' => 'datetime DEFAULT NULL', 'create_time' => 'datetime DEFAULT NULL', 'create_user_id' => 'int(11) DEFAULT NULL', 'update_time' => 'datetime DEFAULT NULL', 'update_user_id' => 'int(11) DEFAULT NULL', ), 'ENGINE=InnoDB');
и это в safeDown ()
$this->dropTable('tbl_issue'); $this->dropTable('tbl_user');
затем запустите его и получите следующее сообщение:
D:\wamp\www\yiisite\protected>yiic migrate PHP Deprecated: Directive 'register_globals' is deprecated in PHP 5.3 and great er in Unknown on line 0 Deprecated: Directive 'register_globals' is deprecated in PHP 5.3 and greater in Unknown on line 0 Yii Migration Tool v1.0 (based on Yii v1.1.13) Total 1 new migration to be applied: m130703_085302_create_issue_user_and_assignment_tables Apply the above migration? (yes|no) [no]:yes *** applying m130703_085302_create_issue_user_and_assignment_tables *** applied m130703_085302_create_issue_user_and_assignment_tables (time: 0.042s ) Migrated up successfully.
теперь проблема в том, что таблицы не создаются в базе данных, это может быть из-за msg, что register_globals устарел, но я не уверен, что делать, параметры подключения верны и запись была вставлена в таблицу tbl_migration
m130703_085302_create_issue_user_and_assignment_ta... 1372842220
но новые таблицы не создаются.
Создание таблицы обычно не требует транзакций
<?php class m130630_124600_some_description_name extends CDbMigration { public function up(){ //upcode example create the session table $this->createTable('session',[ 'id' => "varchar(40) NOT NULL", 'expire' => "int(12)", 'data' => "blob", ]); $this->addPrimaryKey('idx','session','id'); } public function down(){ // downcode (undo the up code) example: drop session table $this->dropTable('session'); } }
Если требуется транзакция
следует за комментарием safeUp :
Этот метод содержит логику, которая должна быть выполнена при применении этой миграции. Этот метод отличается от up () тем, что реализованная здесь логика БД будет заключена в транзакции БД. Родительские классы могут реализовать этот метод вместо up (), если логика БД должна находиться в транзакции.
Проверьте файл config / console.php. Измените имя db, имя пользователя и пароль. Это файл, который использует команда yiic, а не config / main.php. Теперь он должен работать.
Возможно, вы делаете ошибку, что я сделал. yiic – консольная команда. Проверьте свои свойства db для console.php в папке config для вашего проекта. проверьте свои конфиги для консоли.
Он может указывать на testdrive.db SQLite по умолчанию, а таблица создана.
По крайней мере, это была моя проблема.
С уважением, Ajeet
Я просто высушил вам код, он создал таблицы в порядке, поэтому я должен предположить, что это что-то не так с вашим вызовом. Единственное, что сразу же торчит, это то, что вы используете скрипт bash, а не скрипт bat.
yiic – это сценарий bash. В Windows рекомендуется запустить yiic.bat или yiic.php .
Можете ли вы запустить php из командной строки? Если так:
Убедитесь, что вы не создали таблицы tbl_user
или tbl_issue
вручную через MySQL. Если они уже существуют, отбросьте их и снова запустите миграцию.
Также убедитесь, что строки подключения к базе данных в main/config.php
И main/console.php
настроены так, чтобы правильно ссылаться на базу данных, которую должна использовать миграция.
Чтобы подтвердить, что это сработало, когда ваша миграция действительно удалась, вы получите результаты, очень похожие на следующие, перечисляя каждое предпринятое действие SQL. Если вы не видите никаких действий, выполненных в списке, это не работает правильно.
D:\xampp\htdocs\yii\trackstar\protected>yiic migrate Yii Migration Tool v1.0 (based on Yii v1.1.14) Total 1 new migration to be applied: m140406_014347_create_user_issue_assignment_tables Apply the above migration? (yes|no) [no]:y *** applying m140406_014347_create_user_issue_assignment_tables > create table tbl_issue ... done (time: 0.351s) > create table tbl_user ... done (time: 0.405s) > create table tbl_project_user_assignment ... done (time: 0.366s) > add foreign key fk_issue_project: tbl_issue (project_id) references tbl_pr oject (id) ... done (time: 0.923s) > add foreign key fk_issue_owner: tbl_issue (owner_id) references tbl_user ( id) ... done (time: 1.066s) > add foreign key fk_issue_requester: tbl_issue (requester_id) references tb l_user (id) ... done (time: 1.829s) > add foreign key fk_project_user: tbl_project_user_assignment (project_id) references tbl_project (id) ... done (time: 1.416s) > add foreign key fk_user_project: tbl_project_user_assignment (user_id) ref erences tbl_user (id) ... done (time: 1.032s) *** applied m140406_014347_create_user_issue_assignment_tables (time: 7.446s) Migrated up successfully.
Наконец, создание таблиц в MySQL будет неявно зафиксировано после их запуска, поэтому запуск кода в safeDown()
и safeUp()
, который будет запускать ваш код в виде транзакций MySQL, не особенно полезен. Для простоты я переместил код в каждом безопасном методе на соответствующий «небезопасный» метод.
Возможно, вы делаете ошибку, что я сделал. yiic – консольная команда. Проверьте свои свойства db для console.php в папке config для вашего проекта.
Он может указывать на testdrive.db SQLite по умолчанию, а таблица создана.
По крайней мере, это была моя проблема.
С уважением, Ajeet
У меня тоже была такая же проблема. Это удалось устранить, переместив код в
public function up () {code here}
и выполнение миграции с помощью следующей команды
shell> yiic мигрирует вверх