यह देखते हुए कि यह एक कच्चे अभिव्यक्ति है, आप का उपयोग करना चाहिए DB::raw()
सेट करने के लिए CURRENT_TIMESTAMP
एक स्तंभ के लिए कोई डिफ़ॉल्ट मान के रूप में:
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
यह हर डेटाबेस ड्राइवर पर निर्दोष रूप से काम करता है।
नया शॉर्टकट
लारवेल 5.1.25 ( पीआर 10962 और 15c487fe देखें ) के रूप में आप एक कॉलम के लिए डिफ़ॉल्ट मान useCurrent()
सेट करने के लिए नए कॉलम संशोधक विधि का उपयोग कर सकते हैं CURRENT_TIMESTAMP
:
$table->timestamp('created_at')->useCurrent();
इस सवाल पर, MySQL पर आप ON UPDATE
क्लॉज़ का उपयोग कर सकते हैं DB::raw()
:
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
gotchas
MySQL
5.7 MySQL के साथ शुरू, 0000-00-00 00:00:00
अब एक वैध तिथि माना जाता है। जैसा कि लारवेल 5.2 अपग्रेड गाइड में प्रलेखित किया गया है , जब आप अपने डेटाबेस में रिकॉर्ड डालते हैं , तो सभी टाइमस्टैम्प कॉलम को एक वैध डिफ़ॉल्ट मान प्राप्त करना चाहिए। आप useCurrent()
अपने माइग्रेशन में कॉलम मॉडिफायर (लारवेल 5.1.25 और उससे ऊपर) का उपयोग करके टाइमस्टैम्प कॉलम को वर्तमान टाइमस्टैम्प में डिफ़ॉल्ट कर सकते हैं, या आप nullable()
शून्य मानों को अनुमति देने के लिए टाइमस्टैम्प बना सकते हैं ।
PostgreSQL और Laravel 4.x
Laravel 4.x संस्करणों में, PostgreSQL ड्राइवर टाइमस्टैम्प मूल्यों को संग्रहीत करने के लिए डिफ़ॉल्ट डेटाबेस परिशुद्धता का उपयोग कर रहा था। CURRENT_TIMESTAMP
डिफ़ॉल्ट परिशुद्धता के साथ एक स्तंभ पर फ़ंक्शन का उपयोग करते समय , PostgreSQL उपलब्ध उच्च परिशुद्धता के साथ एक टाइमस्टैम्प बनाता है, इस प्रकार एक आंशिक दूसरे भाग के साथ टाइमस्टैम्प पैदा करता है - यह SQL फ़िडल देखें ।
इससे कार्बन एक टाइमस्टैम्प को पार्स करने में विफल हो जाएगा क्योंकि यह उम्मीद नहीं करेगा कि माइक्रोसेकंड संग्रहीत किया जा रहा है। इस अनपेक्षित व्यवहार से बचने के लिए आपको अपने एप्लिकेशन को तोड़ने के लिए CURRENT_TIMESTAMP
नीचे दिए गए फ़ंक्शन को स्पष्ट रूप से शून्य परिशुद्धता देना होगा :
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));
लारवेल 5.0 के बाद से, timestamp()
कॉलम को शून्य की एक डिफ़ॉल्ट परिशुद्धता का उपयोग करने के लिए बदल दिया गया है जो इससे बचता है।
इस मुद्दे को टिप्पणियों में इंगित करने के लिए @andrewhl का धन्यवाद ।
DB::statement
उदाहरण के बजाय इसका उपयोग करें , यह बहुत सरल है।