Comment faire pour désactiver Laravel éloquent Incrément Automatique?
J'ai besoin d'un moyen efficace pour désactiver Laravel de l'auto incriminer la clé primaire de la table que je vais insérer des données dans.
Pourquoi? Je n'ai pas vérifier si il n'y a aucun chevauchement entre la DB et les données insérées donc si il n'y a aucun chevauchement je viens de poignées dans un bloc try-catch.
Le problème est que si il y avait une panne de Laravel compte, comme je l'ai inséré une ligne. Donc les Id de colonne ne va pas être dans cet ordre [1, 2, 3, etc], mais dans ce [1, 4, 8, 20, etc].
J'ai beaucoup cherché sur ce problème et j'ai essayé d'utiliser cette ligne après la déclaration de la classe:
public $autoincrement = false;
Aussi
public $incrementing = false;
Mais ils ne sont pas de travail.
Je veux juste utiliser l'IA de ma DB. Pas Laravel est un.
- coderwall.com/p/lhfzia/...
- "Pas Laravels l'un" que voulez-vous dire par là ? et aussi, avez-vous essayé ma réponse ? aussi, merci de partager votre modèle
- Je l'ai essayé sur 3 fois, mais ça ne fonctionne pas! Je ne sais pas pourquoi!
Vous devez vous connecter pour publier un commentaire.
si vous souhaitez utiliser un
non-incrementing or a non-numeric primary key
vous devezset the public $incrementing property
sur votre modèle defalse
.par exemple :
en cas de migration :
consulter : https://laravel.com/docs/5.3/eloquent#eloquent-model-conventions
Essayer
public $incrementing = false;
Vous devez déclarer votre nouvelle clé primaire dans la table de fichiers de migration:
Bien sûr, vous devez désactiver l'auto-incrémentation dans votre modèle, comme vous l'avez fait.
Il y a 2 solutions à votre problème.
Première est, comme vous l'avez dit, désactiver l'incrément de la colonne. Pour ce faire, il suffit d'aller à votre migrations et changement
$table->increment('id
)`à
$table->integer('id')
Il va supprimer la clé primaire, pour définir la clé primaire, il suffit d'aller à votre fichier de Modèle et ajouter ceci:
Deuxième solution est ce que je préfère. Chaque fois que l'insertion, la mise à jour ou la suppression d'un enregistrement, et même parfois la lecture d'un enregistrement, utilisez laravel de la DB de la transaction. Voici un exemple:
Cette approche est mieux que de supprimer l'auto incrément. Mais maintenant c'est jusqu'à vous de choisir.
Vous pouvez faire quelque chose comme ci-dessous
Table: auteur
Colonnes: id, nom, active
Ici en version remplissable à définir les colonnes que vous souhaitez modifier ou mettre à jour par le biais de modèle. Reste des champs des comportements à adopter à mysql définition.
J'espère que cela va vous aider.
C'est un exemple pour la table créée à son nom site_rules et c'est le fichier de migration qui j'ai ajouter la ligne suivante pour que l'id de primaire et de l'auto incrémenté
//add this line to make id auto incremented from a specified value
DB::statement("ALTER TABLE site_rules AUTO_INCREMENT = 1;");
et c'est le fichier de migration de code :
Essayer
Désolé d'avoir pris de votre temps les gars,
La question est de savoir si nous avons essayé de sauver n'importe quel enregistrement dans MYSQL si il est revenu de la réussite ou de l'échec pour une raison quelconque (comme la duplication dans mon cas),
MYSQL compte que l'auto incrémenter le numéro a été réservé, et tous les autres à venir enregistrement ne va pas le prendre car il peut y avoir plus d'un processus d'insertion sur la DB dans le même temps, et dans l'attente de savoir si l'auto de manière incrémentielle numéro est réservé ou non coûtera MYSQL sa vitesse.
Il n'est donc pas Laravel problème, son une base de données MYSQL l'une.
J'espère qu'il peut aider les autres.
Merci à vous tous...