Ошибка при добавлении внешнего ключа в YII

когда я добавляю этот внешний ключ, используя миграцию yii, отображается эта ошибка:

add foreign key fk_material_userprofile: material (insert_user_ID) references userprofile (userID)
...exception 'CDbException' with message 'CDbCommand failed to execute the SQL statement:
SQLSTATE[HY000]: General error: 1215 Impossible d'ajouter des contraintes d'index externe. The SQL
statement executed was: ALTER TABLE `material` ADD CONSTRAINT `fk_material_userprofile` FOREIGN KEY
(`insert_user_ID`) REFERENCES `userprofile` (`userID`) ON DELETE CASCADE ON UPDATE RESTRICT' in
E:\framework\db\CDbCommand.php:358

и это мой код:

public function up()
{
$this->addForeignKey("fk_newspaper", "materiallll", "newspaper_ID", "newspaper", "newspaper_ID", "CASCADE", "RESTRICT");
}

и это моя база данных:

CREATE TABLE IF NOT EXISTS `materiallll` (
`material_ID` int(11) NOT NULL AUTO_INCREMENT,
`newspaper_ID` tinyint(4) NOT NULL,
PRIMARY KEY (`material_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Помоги мне, пожалуйста.

0

Решение

Вы можете увидеть выполняемый оператор SQL:

ALTER TABLE `material` ADD CONSTRAINT `fk_material_userprofile` FOREIGN KEY
(`insert_user_ID`) REFERENCES `userprofile` (`userID`) ON DELETE CASCADE ON UPDATE RESTRICT'

И вы можете видеть, что это не имеет никакого отношения к предоставленному вами PHP-коду:

public function up()
{
$this->addForeignKey("fk_newspaper", "materiallll", "newspaper_ID", "newspaper", "newspaper_ID",          "CASCADE", "RESTRICT");
}

Таким образом, похоже, что ошибка, которую вы получаете, касается какого-то другого создаваемого вами ограничения, которое называется «fk_material_userprofile» и ссылается на таблицу с именем «userprofile», а не на таблицу с названием «Газета», как говорит ваш PHP-код.

Кроме того, таблица, в которую будет добавлено ограничение внешнего ключа, называется «materiallll» в вашем PHP-коде и называется «material» в исполняемом SQL.

Вот ссылка на использование функции Yii addForeignKey (), и вот ссылка на пост, который дает правильный ДОБАВИТЬ заявление FK.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]