Mi conjetura era usar la siguiente sintaxis:
MyModel::all()->delete();
Pero eso no funcionó. Estoy seguro de que es súper simple, ¡pero he buscado documentación sobre el tema y no puedo encontrarla!
La razón MyModel::all()->delete()
no funciona porque en all()
realidad dispara la consulta y devuelve una colección de objetos Eloquent.
Puede utilizar el método truncado, esto funciona para Laravel 4 y 5:
MyModel::truncate();
Eso elimina todas las filas de la tabla sin registrar eliminaciones de filas individuales.
MyModel::all()->delete()
, usaforeach (MyModel::all() as $e) { $e->delete() }
Laravel 5.2+ solución.
Simplemente tome el constructor subyacente con el nombre de la tabla y haga lo que sea. No podría ser más ordenado que eso.
Solución Laravel 5.6
fuente
Puede usarlo
Model::truncate()
si lo deshabilitaforeign_key_checks
(supongo que usa MySQL).fuente
He visto que ambos métodos se han usado en archivos semilla.
Aunque no puede usar el primero si desea establecer claves foráneas .
Por lo tanto, podría ser una buena idea usar la segunda.
fuente
delete
obviamente no es lo mismo quetruncate
si.Hay una forma indirecta:
Ejemplo:
Información del generador de consultas Laravel: https://laravel.com/docs/5.4/queries
fuente
DELETE FROM users WHERE id LIKE '%%'
que coincide con todas las filas de la tabla, eliminando así todo.whereIn
método:$itemsAllContentIDs = Item::where('user_id', $userId)->pluck('item_content_id')->all();
ItemsContent::whereIn('id', $itemsAllContentIDs)->delete();
Quería agregar otra opción para aquellos que llegan a este hilo a través de Google. Necesitaba lograr esto, pero quería conservar mi valor de incremento automático que se
truncate()
restablece. Tampoco quería usarDB::
nada porque quería operar directamente fuera del objeto modelo. Entonces, fui con esto:Obviamente, la columna tendrá que existir realmente, pero en un modelo Eloquent estándar y listo para usar, la
id
columna existe y nunca es nula. No sé si esta es la mejor opción, pero funciona para mis propósitos.fuente
Model::delete();
logrará lo mismo.Model::delete()
arroja una excepciónNon-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
, al menos en Laravel 5.0.No pude usar,
Model::truncate()
ya que sería un error:Y desafortunadamente
Model::delete()
no funciona (al menos en Laravel 5.0):Pero esto funciona:
Eso eliminará suavemente todas las filas, si tiene configurada la eliminación suave. Para eliminar completamente todas las filas, incluidas las eliminadas temporalmente, puede cambiar esto:
fuente
La mejor manera de lograr esta operación
Laravel 3
parece ser el uso de laFluent
interfaz para truncar la tabla como se muestra a continuaciónfuente
Puede probar este one-liner que conserva las eliminaciones suaves también:
fuente
Solución simple:
fuente
En una línea similar a la respuesta de Travis vignon, requería datos del modelo elocuente, y si las condiciones eran correctas, necesitaba eliminar o actualizar el modelo. Terminé obteniendo el campo mínimo y máximo que había devuelto por mi consulta (en caso de que se agregara otro campo a la tabla que cumpliera con mis criterios de selección) junto con los criterios de selección originales para actualizar los campos a través de una consulta SQL sin procesar (como opuesto a una consulta elocuente por objeto en la colección).
Sé que el uso de SQL sin procesar viola la hermosa filosofía de código de Laravels, pero sería difícil soportar cientos de consultas en lugar de una.
fuente
Puede hacer un para cadabucle también ..
fuente
Solución que trabaja con Lumen 5.5 con restricciones de claves foráneas:
fuente