Oracle
के विपरीत या MySQL
LIMIT
. का उपयोग करके स्टेटमेंट अपडेट करें सीधे PostgreSQL अपडेट स्टेटमेंट
पर संभव नहीं है। इसलिए limit(1)
. का पालन करें क्वेरी बिल्डर इंस्टेंस के लिए विधि कुछ भी नहीं करती है, क्योंकि compileUpdate
Laravel के PostgresGrammar
. से विधि क्लास जो क्वेरी को कंपाइल करने के लिए जिम्मेदार है, केवल व्हेयर स्टेटमेंट्स को कंपाइल करती है।
हालाँकि आप एक ऐसी स्थिति से दूर हो सकते हैं जो एक सबक्वेरी का उपयोग करती है जो केवल एक पंक्ति लौटाती है जिसे अपडेट किया जाएगा। कुछ इस तरह काम करना चाहिए:
DB::table("records")->whereIn('id', function ($query) use ($date_now) {
$query->from('records')
->select('id')
->where('need_moderate', '=', 'no')
->where('locked_per_time', '<', $date_now->format("Y-m-d H:i:s"))
->limit(1);
})->update(["locked_per_time" => $locked_per->format("Y-m-d H:i:s"), 'locked_by' => $mdkey]);
whereIn('id', ...)
शर्त मानती है कि आपकी तालिका में id
. नाम का एक कॉलम है जिसे एक विशिष्ट पहचानकर्ता के रूप में इस्तेमाल किया जा सकता है ताकि यह पहली पंक्ति ढूंढ सके जो सबक्वेरी में आपकी शर्तों से मेल खाती हो।