Lorsque vous utilisez la commande suivante Erreur générale: 1 Tableau - a plus d'une clé primaire p>
blockquote> J'ai essayé de forcer la clé primaire à l'aide de p> PHP Artisan migrer code> Il renvoie l'erreur suivante:
Schema::create('stuff', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('class');
$table->timestamps();
$table->bigIncrements('owner');
$table->float('price');
$table->bigIncrements('teacher');
$table->foreign('owner')->references('id')->on('othertable');
$table->foreign('teacher')->references('id')->on('othertable');
});
}
3 Réponses :
Vous utilisez si bigincrages code> au lieu de INTEGER BigIncrements code> Créer une clé primaire p> propriétaires code> et et et Enseignants CODE> Tables a BigUncriptions CODE> Colonne d'identité afin de remplacer les codes de migration avec: P> Schema::create('stuff', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('class');
$table->timestamps();
$table->unsignedBigInteger('owner');
$table->float('price');
$table->unsignedBigInteger('teacher');
$table->foreign('owner')->references('id')->on('othertable');
$table->foreign('teacher')->references('id')->on('othertable');
});
}
Vous devez créer le propriétaire et l'enseignant biginteger code> au lieu de
évidemment bigincrages strong> DataType de Laravel va faire ce champ Également, si ces deux champs (propriétaire, enseignant) sont des champs de référence, je suppose que vous ne le faites pas besoin de leur donner un type de données de bigincrements. Les modifier à Unsignedbiginteger peut être un meilleur choix. P> p>
Je ne connais pas le laravange, mais
bigincrages code> comme il créerait une clé primaire - les champs d'incrémentation automatique sont généralement des PKS.Pourquoi créez-vous 3 bigUncrements? Changez-le en Integer Field
Voir: laravel.com/docs/5.8/migrations#Creats-Columns