Mon hypothèse était d'utiliser la syntaxe suivante:
MyModel::all()->delete();
Mais ça n'a pas marché. Je suis sûr que c'est super simple, mais j'ai cherché de la documentation sur le sujet et je ne peux pas la trouver!
La raison MyModel::all()->delete()
ne fonctionne pas parce all()
que déclenche en fait la requête et renvoie une collection d'objets Eloquent.
Vous pouvez utiliser la méthode truncate, cela fonctionne pour Laravel 4 et 5:
MyModel::truncate();
Cela supprime toutes les lignes de la table sans enregistrer les suppressions de lignes individuelles.
MyModel::all()->delete()
, utilisezforeach (MyModel::all() as $e) { $e->delete() }
Solution Laravel 5.2+ .
Saisissez simplement le générateur sous-jacent avec le nom de la table et faites ce que vous voulez. Ça ne pourrait pas être plus ordonné que ça.
Solution Laravel 5.6
la source
Vous pouvez utiliser
Model::truncate()
si vous désactivezforeign_key_checks
(je suppose que vous utilisez MySQL).la source
J'ai vu les deux méthodes utilisées dans les fichiers de départ.
Même si vous ne pouvez pas utiliser le premier si vous souhaitez définir des clés étrangères .
Il peut donc être judicieux d'utiliser le second.
la source
delete
ce n'est évidemment pas la même chosetruncate
.Il existe un moyen indirect:
Exemple:
Informations sur le générateur de requêtes Laravel: https://laravel.com/docs/5.4/queries
la source
DELETE FROM users WHERE id LIKE '%%'
qui correspond à toutes les lignes de la table, supprimant ainsi tout.whereIn
méthode:$itemsAllContentIDs = Item::where('user_id', $userId)->pluck('item_content_id')->all();
ItemsContent::whereIn('id', $itemsAllContentIDs)->delete();
Je voulais ajouter une autre option pour ceux qui accèdent à ce fil via Google. J'avais besoin d'accomplir cela, mais je voulais conserver ma valeur d'incrémentation automatique qui se
truncate()
réinitialise. Je ne voulais pas non plus utiliserDB::
quoi que ce soit parce que je voulais opérer directement à partir de l'objet modèle. Alors, je suis allé avec ceci:Évidemment, la colonne devra réellement exister, mais dans un modèle Eloquent standard, prêt à l'emploi, la
id
colonne existe et n'est jamais nulle. Je ne sais pas si c'est le meilleur choix, mais cela fonctionne pour mes besoins.la source
Model::delete();
accomplira la même chose.Model::delete()
lance une exceptionNon-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
, du moins dans Laravel 5.0.Je n'ai pas pu utiliser
Model::truncate()
car cela ferait une erreur:Et malheureusement
Model::delete()
ne fonctionne pas (du moins dans Laravel 5.0):Mais cela fonctionne:
Cela supprimera toutes les lignes, si vous avez configuré la suppression réversible. Pour supprimer complètement toutes les lignes, y compris celles supprimées de manière réversible, vous pouvez changer comme suit:
la source
La meilleure façon d'accomplir cette opération
Laravel 3
semble être l'utilisation de l'Fluent
interface pour tronquer le tableau comme indiqué ci-dessousla source
Vous pouvez essayer ce one-liner qui préserve également les suppressions douces:
la source
solution simple:
la source
Dans la même veine que la réponse de Travis vignon, j'avais besoin des données du modèle éloquent, et si les conditions étaient correctes, je devais supprimer ou mettre à jour le modèle. J'ai fini par obtenir le champ minimum et maximum que j'avais renvoyé par ma requête (au cas où un autre champ serait ajouté à la table qui répondrait à mes critères de sélection) ainsi que les critères de sélection d'origine pour mettre à jour les champs via une requête SQL brute (comme par opposition à une requête éloquente par objet de la collection).
Je sais que l'utilisation de SQL brut viole la belle philosophie de code de laravels, mais il serait difficile de gérer des centaines de requêtes à la place d'une seule.
la source
Peut faire un pour chaqueboucle aussi ..
la source
Solution qui fonctionne avec Lumen 5.5 avec des contraintes de clés étrangères:
la source