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