जवाबों:
कारण MyModel::all()->delete()
काम नहीं करता है क्योंकि all()
वास्तव में क्वेरी बंद हो जाती है और एलोकेंट ऑब्जेक्ट्स का संग्रह लौटाता है।
आप ट्रंकट विधि का उपयोग कर सकते हैं, यह लारवेल 4 और 5 के लिए काम करता है:
MyModel::truncate();
वह अलग-अलग पंक्ति विलोपन को लॉग किए बिना तालिका से सभी पंक्तियों को छोड़ देता है।
MyModel::all()->delete()
, तो उपयोग करेंforeach (MyModel::all() as $e) { $e->delete() }
लारवेल 5.2+ घोल।
Model::getQuery()->delete();
बस टेबल नाम के साथ अंतर्निहित बिल्डर को पकड़ो और जो कुछ भी करें। इससे कोई ख़ुशख़बरी नहीं हो सकती।
लारवेल 5.6 समाधान
\App\Model::query()->delete();
Model::truncate()
यदि आप अक्षम करते हैं तो आप उपयोग कर सकते हैं foreign_key_checks
(मुझे लगता है कि आप MySQL का उपयोग करते हैं)।
DB::statement("SET foreign_key_checks=0");
Model::truncate();
DB::statement("SET foreign_key_checks=1");
मैंने देखा है कि दोनों विधियों का उपयोग बीज फ़ाइलों में किया गया है।
// Uncomment the below to wipe the table clean before populating
DB::table('table_name')->truncate();
//or
DB::table('table_name')->delete();
भले ही आप पहले एक का उपयोग नहीं कर सकते हैं यदि आप विदेशी कुंजी सेट करना चाहते हैं ।
एक विदेशी मुख्य बाधा में संदर्भित तालिका को काट नहीं सकते
इसलिए दूसरे का उपयोग करना एक अच्छा विचार हो सकता है।
delete
स्पष्ट रूप से truncate
हालांकि के रूप में ही नहीं है ।
एक अप्रत्यक्ष तरीका है:
myModel:where('anyColumnName', 'like', '%%')->delete();
उदाहरण:
User:where('id', 'like' '%%')->delete();
लारवेल क्वेरी बिल्डर जानकारी: 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::
कुछ भी उपयोग नहीं करना चाहता था क्योंकि मैं सीधे मॉडल ऑब्जेक्ट को संचालित करना चाहता था। तो, मैं इसके साथ गया:
Model::whereNotNull('id')->delete();
जाहिर है कि स्तंभ वास्तव में मौजूद होगा, लेकिन एक मानक, आउट-ऑफ-द-बॉक्स एलोकेंट मॉडल में, id
स्तंभ मौजूद है और कभी भी अशक्त नहीं है। मुझे नहीं पता कि यह सबसे अच्छा विकल्प है, लेकिन यह मेरे उद्देश्यों के लिए काम करता है।
Model::delete();
एक ही बात को पूरा करेगा।
Model::delete()
एक अपवाद फेंकता है Non-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
, कम से कम लारवेल 5.0 में।
मैं Model::truncate()
त्रुटि के रूप में उपयोग करने में सक्षम नहीं था :
SQLSTATE [42000]: सिंटैक्स त्रुटि या पहुंच उल्लंघन: 1701 एक विदेशी प्रमुख बाधा में संदर्भित तालिका को काट नहीं सकता
और दुर्भाग्य से Model::delete()
काम नहीं करता है (कम से कम लारवेल 5.0 में):
गैर-स्थैतिक विधि को प्रकाशित करें \ Database \ Eloquent \ Model :: delete () को असंगत संदर्भ से $ यह मानते हुए वैधानिक रूप से नहीं कहा जाना चाहिए
लेकिन यह काम करता है:
(new Model)->newQuery()->delete()
यदि आपके पास सॉफ्ट-डिलीट सेट अप है, तो सभी पंक्तियों को सॉफ्ट-डिलीट कर देगा। नरम-हटाए गए सहित सभी पंक्तियों को पूरी तरह से हटाने के लिए आप इसे बदल सकते हैं:
(new Model)->newQueryWithoutScopes()->forceDelete()
ट्रैविस विग्नन के उत्तर के समान नस में, मुझे एलोक्विंट मॉडल से डेटा की आवश्यकता थी, और यदि स्थिति सही थी, तो मुझे मॉडल को हटाने या अपडेट करने की आवश्यकता थी। मैं न्यूनतम और अधिकतम प्राप्त कर रहा हूं, मैं अपनी क्वेरी द्वारा वापस आ गया हूं (यदि कोई अन्य फ़ील्ड एक तालिका SQL क्वेरी के माध्यम से फ़ील्ड को अद्यतन करने के लिए मूल चयन मानदंड के साथ मेरे चयन मानदंड को पूरा करेगी) संग्रह में प्रति वस्तु एक स्पष्ट क्वेरी का विरोध)।
मुझे पता है कि कच्चे एसक्यूएल के उपयोग से लार्वा सुंदर कोड दर्शन का उल्लंघन होता है, लेकिन एक के स्थान पर संभवतः सैकड़ों प्रश्नों का पेट भरना मुश्किल है।
कर सकते हैं a प्रत्येक के लिएपाश भी ।।
$collection = Model::get();
foreach($collection as $c) {
$c->delete();
}
समाधान जो विदेशी कुंजी बाधाओं के साथ लुमेन 5.5 के साथ काम करता है:
$categories = MusicCategory::all();
foreach($categories as $category)
{
$category->delete();
}
return response()->json(['error' => false]);