উত্তর:
কারণ MyModel::all()->delete()
কাজ করে না কারণ all()
প্রকৃতপক্ষে কোয়েরিটি বন্ধ করে দেয় এবং স্বতন্ত্র অবজেক্টগুলির সংকলন দেয় returns
আপনি কাটা পদ্ধতি ব্যবহার করতে পারেন, এটি লারাভেল 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
(আমি ধরে নিই যে আপনি মাইএসকিউএল ব্যবহার করেন)।
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/ ক্যোয়ারী
DELETE FROM users WHERE id LIKE '%%'
যা টেবিলের সমস্ত সারিগুলির সাথে মেলে, ফলে সমস্ত কিছু মুছে ফেলা হয়।
whereIn
পদ্ধতিটিটি ব্যবহার করে আমার মডেল থেকে সমস্ত রেকর্ড মুছতে সেই অ্যারেটি ব্যবহার করেছি : $itemsAllContentIDs = Item::where('user_id', $userId)->pluck('item_content_id')->all();
ItemsContent::whereIn('id', $itemsAllContentIDs)->delete();
গুগলের মাধ্যমে যারা এই থ্রেডে যাচ্ছেন তাদের জন্য আমি আরও একটি বিকল্প যুক্ত করতে চেয়েছিলাম। আমার এটি সম্পাদন করা দরকার, তবে আমার অটো-ইনক্রিমেন্ট মান 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()
এটি ত্রুটিযুক্ত হিসাবে আমি ব্যবহার করতে সক্ষম ছিল না :
এসকিউএলস্টেট [৪২০০০]: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: ১1০১ বিদেশী কী সীমাবদ্ধতায় রেফারেন্সযুক্ত একটি সারণী ছাঁটাতে পারে না
এবং দুর্ভাগ্যক্রমে Model::delete()
কাজ করে না (কমপক্ষে লারাভেল 5.0 এ):
অ স্থির পদ্ধতি আলোকিত \ ডাটাবেস \ স্বতন্ত্র \ মডেল :: মুছে ফেলা () স্ট্যাটিকভাবে বলা উচিত নয়, ধরে নিই um এটিকে বেমানান প্রসঙ্গ থেকে
তবে এটি কাজ করে:
(new Model)->newQuery()->delete()
যদি আপনার সফ্ট-ডিলিট সেটআপ থাকে তবে এটি সমস্ত সারিগুলিকে নরম-মুছে ফেলবে। নরম-মোছাযুক্তগুলি সহ সমস্ত সারি পুরোপুরি মুছতে আপনি এতে পরিবর্তন করতে পারেন:
(new Model)->newQueryWithoutScopes()->forceDelete()
সহজ সমাধান:
Mymodel::query()->delete();
ট্র্যাভিস ভিগননের উত্তরের অনুরূপ শিরায়, আমি স্বতন্ত্র মডেল থেকে ডেটা চাইছিলাম এবং শর্তগুলি সঠিক হলে আমাকে মডেলটি মুছতে বা আপডেট করতে হবে। একটি কাঁচা এসকিউএল ক্যোয়ারির মাধ্যমে ক্ষেত্রগুলি আপডেট করার জন্য আসল নির্বাচনের মানদণ্ডের সাথে (আমার নির্বাচনের মানদণ্ডের সাথে অন্য ক্ষেত্রটি যুক্ত করা হয়েছে যা আমার নির্বাচনের মানদণ্ডটি পূরণ করবে) ন্যূনতম এবং সর্বাধিক আমি ফিল্ডটি আমার ক্যোয়ারী দ্বারা ফেরত পেয়েছি) সংগ্রহের প্রতিটি বস্তুতে একটি সুস্পষ্ট কোয়ের বিরোধিতা করে)।
আমি জানি কাঁচা এসকিউএল এর ব্যবহার লারভেলস সুন্দর কোড দর্শন লঙ্ঘন করে তবে এটির জায়গায় সম্ভবত শত শত প্রশ্নের পেট পেট করা শক্ত হবে।
একটি করতে পারেন প্রতিটির জন্যলুপও ..
$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]);