Я предполагал использовать следующий синтаксис:
MyModel::all()->delete();
Но это не сработало. Я уверен, что это очень просто, но я искал документацию по этой теме и не нашел!
Причина MyModel::all()->delete()
неработоспособности заключается в том, что на all()
самом деле запрос запускается и возвращает коллекцию объектов Eloquent.
Вы можете использовать метод truncate, это работает для Laravel 4 и 5:
MyModel::truncate();
Это удаляет все строки из таблицы без регистрации удаления отдельных строк.
MyModel::all()->delete()
, используйтеforeach (MyModel::all() as $e) { $e->delete() }
Решение Laravel 5.2+ .
Просто возьмите базовый конструктор с именем таблицы и сделайте что угодно. Не может быть лучше этого.
Решение Laravel 5.6
источник
Вы можете использовать,
Model::truncate()
если отключитеforeign_key_checks
(я предполагаю, что вы используете MySQL).источник
Я видел, что оба метода использовались в исходных файлах.
Даже если вы не можете использовать первый, если хотите установить внешние ключи .
Так что было бы неплохо использовать второй.
источник
delete
очевидно, это не то же самоеtruncate
.Есть косвенный способ:
Пример:
Информация о построителе запросов Laravel: https://laravel.com/docs/5.4/queries
источник
DELETE FROM users WHERE id LIKE '%%'
который соответствует всем строкам в таблице, тем самым удаляя все.whereIn
метода:$itemsAllContentIDs = Item::where('user_id', $userId)->pluck('item_content_id')->all();
ItemsContent::whereIn('id', $itemsAllContentIDs)->delete();
Я хотел добавить еще один вариант для тех, кто попадает в эту ветку через Google. Мне нужно было это сделать, но я хотел сохранить значение автоинкремента, которое
truncate()
сбрасывается. Я также не хотелDB::
ничего использовать, потому что хотел работать непосредственно с объектом модели. Итак, я пошел с этим:Очевидно, что столбец должен действительно существовать, но в стандартной готовой модели Eloquent
id
столбец существует и никогда не имеет значения NULL. Не знаю, лучший ли это выбор, но он работает для моих целей.источник
Model::delete();
выполнит то же самое.Model::delete()
выдает исключениеNon-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
, по крайней мере, в Laravel 5.0.Я не смог использовать, так
Model::truncate()
как это вызвало бы ошибку:И, к сожалению
Model::delete()
, не работает (по крайней мере, в Laravel 5.0):Но это действительно работает:
Это приведет к мягкому удалению всех строк, если у вас настроено мягкое удаление. Чтобы полностью удалить все строки, включая частично удаленные, вы можете изменить это:
источник
Лучшим способом выполнения этой операции, по-
Laravel 3
видимому, является использованиеFluent
интерфейса для усечения таблицы, как показано ниже.источник
Вы можете попробовать этот однострочник, который также сохраняет мягкие удаления:
источник
простое решение:
источник
Подобно ответу Трэвиса Виньона, мне потребовались данные из красноречивой модели, и если условия были правильными, мне нужно было либо удалить, либо обновить модель. Я получил минимальное и максимальное значение поля, возвращаемое моим запросом (в случае, если в таблицу было добавлено другое поле, которое соответствовало бы моим критериям выбора) вместе с исходными критериями выбора для обновления полей с помощью одного необработанного SQL-запроса (как в отличие от одного красноречивого запроса на объект в коллекции).
Я знаю, что использование необработанного SQL нарушает философию прекрасного кода Laravel, но было бы трудно переварить, возможно, сотни запросов вместо одного.
источник
Может сделать для каждогопетля тоже ..
источник
Решение, которое работает с Lumen 5.5 с ограничениями внешних ключей:
источник