2014-11-28 2 views
1

Код в книге, которую я читал, говорит, чтобы сделать следующее.YII добавление внешних ключей выпуск

запустить следующую команду:

yiic migrate create create_issue_user_and_assignment_tables 

Я побежал выше команду в защищенном каталоге.

и файл был создать в папке Migrate, книга инструкции, я вставил следующий код в созданный файл:

public function safeUp() 
    { 
    //create the issue table 
    $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'); 

    //create the assignment table that allows for many-to-many 
    //relationship between projects and users 
    $this->createTable('tbl_project_user_assignment', array(
    'project_id' => 'int(11) NOT NULL', 
    'user_id' => 'int(11) NOT NULL', 
    'PRIMARY KEY (`project_id`,`user_id`)', 
    ), 'ENGINE=InnoDB'); 
    //foreign key relationships 
    //the tbl_issue.project_id is a reference to tbl_project.id 
    $this->addForeignKey("fk_issue_project", "tbl_issue", "project_ 
    id", "tbl_project", "id", "CASCADE", "RESTRICT"); 
    //the tbl_issue.owner_id is a reference to tbl_user.id 
    $this->addForeignKey("fk_issue_owner", "tbl_issue", "owner_id", 
    "tbl_user", "id", "CASCADE", "RESTRICT"); 
    //the tbl_issue.requester_id is a reference to tbl_user.id 
    $this->addForeignKey("fk_issue_requester", "tbl_issue", 
    "requester_id", "tbl_user", "id", "CASCADE", "RESTRICT"); 
    //the tbl_project_user_assignment.project_id is a reference to 
    //tbl_project.id 
    $this->addForeignKey("fk_project_user", "tbl_project_user_ 
    assignment", "project_id", "tbl_project", "id", "CASCADE", 
    "RESTRICT"); 
    //the tbl_project_user_assignment.user_id is a reference to tbl_ 
    //user.id 
    $this->addForeignKey("fk_user_project", "tbl_project_user_ 
    assignment", "user_id", "tbl_user", "id", "CASCADE", "RESTRICT"); 
    } 
    public function safeDown() 
    { 
    $this->truncateTable('tbl_project_user_assignment'); 
    $this->truncateTable('tbl_issue'); 
    $this->truncateTable('tbl_user'); 
    $this->dropTable('tbl_project_user_assignment'); 
    $this->dropTable('tbl_issue'); 
    $this->dropTable('tbl_user'); 
    } 

, который я сделал, теперь в командной строке я пошел и побежал следующее команда:

yiic migrate 

Это дало мне успешное сообщение о переносе. но почему-то таблицы не были созданы, поэтому я просмотрел SO для справки, и здесь SO Question

Я узнал, что было бы разумно использовать команды up() и down() вместо safeUp() и safeDown().

, так что я сделал это .. и хорошо, я был почти успешным, ниже снимок экрана о том, что происходит, когда после изменения имен методов в up() nd down(), и я запускаю команду migrate, что происходит.

enter image description here

Теперь посмотрим, как создаются tables_issue, table_user и т.д., но как-то создание внешних ключей не удается. я не знаю, почему, я столкнулся с другим потоком, который имел проблему с созданием внешних ключей, но почему-то, пока это не решило мою проблему.

foreign keys

Я очень ценю ваше время и усилия в ответ на мой вопрос.

ответ

0

Вы использовали project_ id вместо project_id.

+0

Спасибо, это была проблема. TY friend –