1

我是 Yii 的新手(仍在学习) 我正在按照书中的教程进行操作

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.

现在的问题是没有在数据库中创建表,这可能是因为不推荐使用 register_globals 的味精,但我不确定该怎么做,连接参数正确并且在表 tbl_migration 中插入了一条记录

m130703_085302_create_issue_user_and_assignment_ta...   1372842220

但没有创建新表。

4

7 回答 7

3

创建表通常不需要事务

<?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()的不同之处在于此处实现的 DB 逻辑将包含在 DB 事务中。如果 DB 逻辑需要在事务中,则子类可以实现此方法而不是up() 。

于 2013-07-03T21:47:50.127 回答
1

检查 config/console.php 文件 更改数据库名称、用户名和密码。这是 yiic 命令使用的文件,而不是 config/main.php 它现在应该可以工作了

于 2013-11-18T20:49:41.660 回答
1

可能你做错了,我做了什么。yiic 是一个控制台命令。检查项目配置文件夹中console.php 的数据库属性。检查您的控制台配置。

它可能指向 testdrive.db SQLite 默认一个 & 表是由他们创建的。

至少这是我的问题。

问候, 阿吉特

于 2014-10-22T04:32:21.043 回答
0

可能你做错了,我做了什么。yiic 是一个控制台命令。检查项目配置文件夹中console.php 的数据库属性。

它可能指向 testdrive.db SQLite 默认一个 & 表是由他们创建的。

至少这是我的问题。

问候, 阿吉特

于 2014-10-21T02:49:52.697 回答
0

我只是干了你的代码,它创建了表格,所以我不得不假设你的调用有问题。唯一立即突出的是您运行的是 bash 脚本而不是 bat 脚本。

yiic是一个 bash 脚本。在 Windows 上,建议运行yiic.batyiic.php

你可以从命令行运行 php 吗?如果是这样:

  • 从 tbl_migrations 中删除迁移
  • 将迁移运行为“C:\path\to\php.exe yiic.php migrate up”
于 2013-07-03T13:17:40.847 回答
0

确保您没有通过 MySQL 手动创建tbl_useror表。tbl_issue如果它们已经存在,请删除它们,然后再次运行迁移。

还要检查以确保main/config.phpANDmain/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()andsafeUp()方法中运行代码(将代码作为 MySQL 事务运行)并不是特别有用。为简单起见,我会将每个安全方法中的代码移动到相应的“非安全”方法中。

于 2014-04-06T02:12:33.817 回答
0

我也有同样的问题。通过将代码移至

公共函数 up() { 代码在这里 }

并通过以下命令执行迁移

shell> yiic 向上迁移

于 2015-07-13T07:27:04.167 回答