Bonjour,
Voila je rencontre un petit problème avec mon code.
Je veux utiliser un champ "key" dans ma base de données comme clé étrangère mais lorsque je lance la commande
php artisan migrate
je reçois un message d'erreur
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint users_role_key_foreign foreign key (`role_key`) references `role` (`key`) on delete restrict on update restrict)
voila une partie de mon code :
ma table users
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->integer('key')->unique();
$table->string('email')->unique();
$table->timestamps();
});
ma table role
Schema::create('role', function (Blueprint $table) {
$table->increments('id');
$table->integer('key')->unique();
$table->string('title')->unique();
$table->timestamps();
});
et mon fichier add_foreign_key
Schema::table('users', function(Blueprint $table) {
$table->foreign('role_key')->references('key')->on('role')
->onDelete('restrict')
->onUpdate('restrict');
});
je ne comprend pas d'où vient mon problème, ma BDD est bien en InnoDB.
merci d'avance pour votre aide
Parce que clé est défini comme unique mais pas comme uné cle primaire
Tu dois utiliser la méthode unsigned() sur ta clé étrangère :
$table->integer('key')->unsigned()->index();
Et elle ne doit pas forcément être unique. En règle générale pas du tout même.
je viens de m'apercevoir que je n'avait pas mis le bon morceau de code.
j'ai bien unsigned() mais pas index().. c'est important ?