Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं लैरवेल माइग्रेशन के साथ टाइमस्टैम्प कॉलम का डिफ़ॉल्ट मान वर्तमान टाइमस्टैम्प पर कैसे सेट कर सकता हूं?

यह देखते हुए कि यह एक कच्ची अभिव्यक्ति है, आपको 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() लाने के लिए टिप्पणियों में शॉर्टकट।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में एक फ्लोट का चयन करना

  2. मैं MySQL में FULL OUTER JOIN कैसे कर सकता हूँ?

  3. Php . के साथ MySql डेटाबेस में ब्लॉब्स डालें

  4. Ubuntu 12.04 पर phpMyAdmin के साथ MySQL कैसे स्थापित करें?

  5. एक MySQL ट्रिगर में तालिका अद्यतन को रोकने में त्रुटि फेंको