Dugaan saya adalah menggunakan sintaks berikut:
MyModel::all()->delete();
Tetapi itu tidak berhasil. Saya yakin ini sangat sederhana, tetapi saya telah mencari dokumentasi tentang masalah ini dan tidak dapat menemukannya!
Alasannya MyModel::all()->delete()
tidak berhasil adalah karena all()
sebenarnya memadamkan kueri dan mengembalikan koleksi objek Eloquent.
Anda dapat menggunakan metode truncate, ini berfungsi untuk Laravel 4 dan 5:
MyModel::truncate();
Itu menjatuhkan semua baris dari tabel tanpa mencatat penghapusan baris individu.
MyModel::all()->delete()
, gunakanforeach (MyModel::all() as $e) { $e->delete() }
Solusi Laravel 5.2+ .
Hanya ambil pembangun yang mendasari dengan nama tabel dan lakukan apa pun. Tidak bisa lebih rapi dari itu.
Laravel 5.6 solusi
sumber
Anda dapat menggunakan
Model::truncate()
jika Anda menonaktifkanforeign_key_checks
(saya berasumsi Anda menggunakan MySQL).sumber
Saya telah melihat kedua metode telah digunakan dalam file seed.
Meskipun Anda tidak dapat menggunakan yang pertama jika Anda ingin mengatur kunci asing .
Jadi mungkin ide yang baik untuk menggunakan yang kedua.
sumber
delete
jelas tidak sama dengan itutruncate
.Ada cara tidak langsung:
Contoh:
Informasi pembuat kueri laravel: https://laravel.com/docs/5.4/queries
sumber
DELETE FROM users WHERE id LIKE '%%'
yang cocok dengan semua baris dalam tabel, sehingga menghapus semuanya.whereIn
metode:$itemsAllContentIDs = Item::where('user_id', $userId)->pluck('item_content_id')->all();
ItemsContent::whereIn('id', $itemsAllContentIDs)->delete();
Saya ingin menambahkan opsi lain untuk mereka yang mendapatkan utas ini melalui Google. Saya perlu melakukan ini, tetapi ingin mempertahankan nilai kenaikan otomatis yang
truncate()
diatur ulang. Saya juga tidak ingin menggunakanDB::
apa pun karena saya ingin beroperasi langsung dari objek model. Jadi, saya pergi dengan ini:Jelas kolom harus benar-benar ada, tetapi dalam model Eloquent out-of-the-box standar,
id
kolom ada dan tidak pernah nol. Saya tidak tahu apakah ini pilihan terbaik, tetapi ini berfungsi untuk tujuan saya.sumber
Model::delete();
akan mencapai hal yang sama.Model::delete()
melempar pengecualianNon-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
, setidaknya di Laravel 5.0.Saya tidak dapat menggunakan
Model::truncate()
karena itu akan kesalahan:Dan sayangnya
Model::delete()
tidak berfungsi (setidaknya di Laravel 5.0):Tetapi ini berhasil:
Itu akan menghapus semua baris secara lunak, jika Anda memiliki pengaturan penghapusan-lunak. Untuk sepenuhnya menghapus semua baris termasuk yang terhapus dengan lembut, Anda dapat mengubahnya menjadi ini:
sumber
Cara terbaik untuk menyelesaikan operasi ini
Laravel 3
adalah dengan menggunakanFluent
antarmuka untuk memotong tabel seperti yang ditunjukkan di bawah inisumber
Anda dapat mencoba one-liner ini yang menjaga soft-delete juga:
sumber
solusi sederhana:
sumber
Dalam nada yang mirip dengan jawaban Travis vignon, saya memerlukan data dari model fasih, dan jika kondisinya benar, saya harus menghapus atau memperbarui model. Saya akhirnya mendapatkan bidang minimum dan maksimum saya akan dikembalikan oleh permintaan saya (kalau-kalau bidang lain ditambahkan ke tabel yang akan memenuhi kriteria pilihan saya) bersama dengan kriteria seleksi asli untuk memperbarui bidang melalui satu permintaan SQL mentah (seperti menentang satu kueri fasih per objek dalam koleksi).
Saya tahu penggunaan SQL mentah melanggar filosofi kode indah laravel, tapi itu akan sulit untuk mencerna ratusan pertanyaan di tempat satu.
sumber
Bisa melakukan a untuk setiaplingkaran juga ..
sumber
Solusi yang bekerja dengan Lumen 5.5 dengan batasan kunci asing:
sumber