2020 अद्यतन
जैसा कि लारवेल में = = 5.3 , अगर कोई अभी भी उत्सुक है कि आसान तरीके से ऐसा कैसे किया जाए। इसका उपयोग करके संभव है:updateOrCreate()
:।
उदाहरण के लिए पूछे गए प्रश्न के लिए आप कुछ का उपयोग कर सकते हैं:
$matchThese = ['shopId'=>$theID,'metadataKey'=>2001];
ShopMeta::updateOrCreate($matchThese,['shopOwner'=>'New One']);
ऊपर कोड ShopMeta द्वारा प्रतिनिधित्व की गई तालिका की जांच करेगा, जो 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
या इसमें डिफ़ॉल्ट मान नहीं है।
अधिक संदर्भ के लिए कृपया यहां लारवेल डॉक्यूमेंटेशन देखें:
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]
);
जो बहुत कुछ साफ करता है।
क्वेरी बिल्डर अद्यतन
किसी ने पूछा है कि क्या लारवेल में क्वेरी बिल्डर का उपयोग करना संभव है। यहाँ Laravel डॉक्स से क्वेरी बिल्डर का संदर्भ दिया गया है।
क्वेरी बिल्डर बिल्कुल एलोकेंट के समान काम करता है इसलिए जो कुछ भी एलोकेंट के लिए सही है वह क्वेरी बिल्डर के लिए भी सही है। तो इस विशिष्ट मामले के लिए, बस अपने क्वेरी बिल्डर के साथ समान फ़ंक्शन का उपयोग करें:
$matchThese = array('shopId'=>$theID,'metadataKey'=>2001);
DB::table('shop_metas')::updateOrCreate($matchThese,['shopOwner'=>'New One']);
बेशक, डीबी मुखौटा जोड़ने के लिए मत भूलना:
use Illuminate\Support\Facades\DB;
या
use DB;
मुझे उम्मीद है यह मदद करेगा
shopId
आपकी प्राथमिक कुंजी सही नहीं है?