когда я добавляю этот внешний ключ, используя миграцию 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 ;
Помоги мне, пожалуйста.
Вы можете увидеть выполняемый оператор 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.
Других решений пока нет …