2020 আপডেট
মতই Laravel> = 5.3 , কেউ এখনো সহজ ভাবে তা করতে কিভাবে জানতে আগ্রহী হলে। তার ব্যবহার করে সম্ভব: updateOrCreate()
।
জিজ্ঞাসিত প্রশ্নের উদাহরণস্বরূপ আপনি এমন কিছু ব্যবহার করতে পারেন:
$matchThese = ['shopId'=>$theID,'metadataKey'=>2001];
ShopMeta::updateOrCreate($matchThese,['shopOwner'=>'New One']);
উপরে কোড শপমেটা দ্বারা প্রতিনিধিত্ব করা সারণীটি পরীক্ষা করবে, যা সম্ভবত shop_metas
অন্য কোনও মডেল হিসাবে সংজ্ঞায়িত না করা হয়
এবং এটি দিয়ে প্রবেশের চেষ্টা করবে
স্তম্ভ shopId = $theID
এবং
স্তম্ভ metadateKey = 2001
এবং যদি এটি সন্ধান করে তবে এটি shopOwner
পাওয়া সারিটির কলামটি আপডেট করবে New One
।
এটা একাধিক মিলে যাওয়া সারি খুঁজে বের করে, তাহলে এটা যে যার সর্বনিম্ন প্রাথমিক হয়েছে খুব প্রথম সারিতে আপডেট হবে id
।
যদি কিছু না পাওয়া যায় তবে এটি এর সাথে একটি নতুন সারি প্রবেশ করবে:
shopId = $theID
, metadateKey = 2001
এবংshopOwner = New One
নোটিশ
আপনার মডেলটি পরীক্ষা করুন$fillable
এবং মামলা করুন যে আপনি সেখানে প্রতিটি কলামের নাম সংজ্ঞায়িত করেছেন যা আপনি সন্নিবেশ করতে বা আপডেট করতে চান এবং বিশদ কলামগুলিতে ডিফল্ট মান বা এর id
কলামের স্বয়ংক্রিয় বর্ধমান রয়েছে।
অন্যথায় উপরের উদাহরণটি কার্যকর করার সময় এটি ত্রুটি ছুঁড়ে ফেলবে:
Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1364 Field '...' doesn't have a default value (SQL: insert into `...` (`...`,.., `updated_at`, `created_at`) values (...,.., xxxx-xx-xx xx:xx:xx, xxxx-xx-xx xx:xx:xx))'
যেহেতু এমন কোনও ক্ষেত্র থাকবে যার নতুন সারি সন্নিবেশ করার সময় মানটির প্রয়োজন হবে এবং এটির পক্ষে এটির সংজ্ঞা দেওয়া হয়নি $fillable
বা এটির ডিফল্ট মান নেই possible
আরও রেফারেন্সের জন্য দয়া করে লারাভেল ডকুমেন্টেশন দেখুন:
https://laravel.com/docs/5.3/eloquent
সেখান থেকে একটি উদাহরণ:
// If there's a flight from Oakland to San Diego, set the price to $99.
// If no matching model exists, create one.
$flight = App\Flight::updateOrCreate(
['departure' => 'Oakland', 'destination' => 'San Diego'],
['price' => 99]
);
যা প্রায় সবকিছু পরিষ্কার করে দেয়।
অনুসন্ধানী নির্মাতা আপডেট
কেউ জিজ্ঞাসা করেছেন যে লারাভেলে কোয়েরি বিল্ডার ব্যবহার করা সম্ভব কিনা। লারাভেল ডক্স থেকে ক্যোয়ারী বিল্ডারের জন্য এখানে উল্লেখ রয়েছে।
ক্যোয়ারি বিল্ডার এলওভার্টের মতো ঠিক একইভাবে কাজ করে তাই যে কোনও কিছু যা এলওভারেন্টের জন্য সত্য তা কোয়েরি বিল্ডারের ক্ষেত্রেও সত্য। সুতরাং এই নির্দিষ্ট ক্ষেত্রে, আপনার কোয়েরি বিল্ডারের সাথে কেবল একই ফাংশনটি ব্যবহার করুন:
$matchThese = array('shopId'=>$theID,'metadataKey'=>2001);
DB::table('shop_metas')::updateOrCreate($matchThese,['shopOwner'=>'New One']);
অবশ্যই, ডিবি মুখোমুখি যুক্ত করতে ভুলবেন না:
use Illuminate\Support\Facades\DB;
অথবা
use DB;
আমি আসা করি এটা সাহায্য করবে
shopId
আপনার প্রাথমিক কী না, তাই না?