1

私は Yii を初めて使用します (まだ学習中です) 私は、本に書かれているように、ここで本チュートリアルに従っています 新しい移行を作成しました

yiic migrate create create_issue_user_and_assignment_tables

そしてセーフアップで私はこのクエリを書きました

$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のコメントに従います。

このメソッドには、この移行を適用するときに実行されるロジックが含まれています。このメソッドは、ここで実装された DB ロジックが DB トランザクション内に含まれるという点でup()とは異なります。DB ロジックがトランザクション内にある必要がある場合、子クラスはup()の代わりにこのメソッドを実装できます。

于 2013-07-03T21:47:50.127 に答える
1

おそらくあなたは間違いをしている、私がしたこと。yiic はコンソール コマンドです。プロジェクトの config フォルダーにある console.php の db プロパティを確認してください。コンソールの設定を確認してください。

testdrive.db SQLiteのデフォルトのものを指している可能性があり、テーブルが作成されます。

少なくともこれは私の問題でした。

よろしく、アジート

于 2014-10-22T04:32:21.043 に答える
1

config/console.php ファイルを確認してください。データベース名、ユーザー名、およびパスワードを変更してください。これは、config/main.php ではなく、yiic コマンドが使用するファイルです。これで動作するはずです

于 2013-11-18T20:49:41.660 に答える
0

その中のコードをドライランしたところ、テーブルが正常に作成されたので、呼び出しに問題があると想定する必要があります。すぐに突き出ているのは、bat スクリプトではなく bash スクリプトを実行していることだけです。

yiicは bash スクリプトです。Windows では、yiic.batまたはyiic.phpを実行することをお勧めします。

コマンドラインからphpを実行できますか?もしそうなら:

  • tbl_migrations から移行を削除します
  • 移行を「C:\path\to\php.exe yiic.php migrate up」として実行します。
于 2013-07-03T13:17:40.847 に答える
0

おそらくあなたは間違いをしている、私がしたこと。yiic はコンソール コマンドです。プロジェクトの config フォルダーにある console.php の db プロパティを確認してください。

testdrive.db SQLiteのデフォルトのものを指している可能性があり、テーブルが作成されます。

少なくともこれは私の問題でした。

よろしく、アジート

于 2014-10-21T02:49:52.697 に答える