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

केकेपीएचपी 3 टाइम कॉलम में तारीख जोड़ी जाती है

दिनांक/समय मान सभी एक ही आधार संरचना में डाले जा रहे हैं, जो कि एक DateTime है या DateTimeImmutable ऑब्जेक्ट, और इसलिए स्वाभाविक रूप से दिनांक-केवल मानों में एक समय मान जोड़ा जाएगा (00:00:00 ), और केवल-समय के मान दिनांक (वर्तमान दिनांक) के साथ आते हैं।

केकेपीएचपी एसक्यूएल डेटाटाइप के आधार पर विशिष्ट उपवर्गों का उपयोग करेगा, जो कि

. है
  • \Cake\I18n\Time या \Cake\I18n\FrozenTime TIME . के लिए , TIMESTAMP , और DATETIME
  • \Cake\I18n\Date या \Cake\I18n\FrozenDate DATE . के लिए

पहले केकेपीएचपी 3 संस्करणों में केवल \Cake\I18n\Time . था ।

यह अच्छा होगा यदि केवल-समय के प्रकारों के लिए एक अलग वर्ग होगा, जिसमें एक उचित समय-केवल डिफ़ॉल्ट आउटपुट स्वरूप सेट होगा, लेकिन जब तक ऐसा कुछ नहीं जोड़ा जाता है, तब तक आपको आउटपुट प्रारूप का ध्यान रखना होगा। ।

आपके विचारों में प्रारूपित करें

यह आप पर निर्भर है कि आप इसे अपने विचारों में कैसे प्रदर्शित करते हैं। आप आसानी से i18nFormat() . का उपयोग कर सकते हैं TIME . की विधि क्लास इंस्टेंस

$record['start_time']->i18nFormat(
    [\IntlDateFormatter::NONE, \IntlDateFormatter::SHORT]
)

या TIME हेल्पर, केवल टाइम पार्ट दिखाने के लिए

$this->Time->i18nFormat(
    $record['start_time'],
    [\IntlDateFormatter::NONE, \IntlDateFormatter::SHORT]
)

मान लीजिए कि अगर सेंकना कॉलम के प्रकार के अनुसार समान कोड उत्पन्न करेगा तो यह चोट नहीं पहुंचाएगा, आप सुझाव दें कि एक एन्हांसमेंट के रूप में . जैसा कि उल्लेख किया गया है कि केवल-समय के कॉलम के लिए अतिरिक्त कक्षाओं (या शायद विकल्प) का उपयोग करने पर भी विचार करने लायक कुछ हो सकता है।

कस्टम टाइम क्लास का उपयोग करें

यदि आप यह व्यवहार हर जगह चाहते हैं जहां ऑब्जेक्ट के स्ट्रिंग प्रतिनिधित्व का उपयोग किया जा रहा है, बिना फॉर्मेटर को मैन्युअल रूप से आमंत्रित किए, तो आप एक विस्तारित \Cake\I18n\Time का उपयोग कर सकते हैं। या \Cake\I18n\FrozenTime एक ओवरराइड के साथ वर्ग $_toStringFormat संपत्ति, ताकि यह तदनुसार तिथि को प्रारूपित करे।

src/I18n/FrozenTimeOnly.php

namespace App\I18n;

use Cake\I18n\FrozenTime;

class FrozenTimeOnly extends FrozenTime
{
    protected static $_toStringFormat = [
        \IntlDateFormatter::NONE,
        \IntlDateFormatter::SHORT
    ];
}

src/config/bootstrap.php

use Cake\Database\Type\TimeType;
use App\I18n\FrozenTimeOnly;
TimeType::$dateTimeClass = FrozenTimeOnly::class;

// remove the default `useImmutable()` call, you may however
// want to keep further calls for formatting and stuff
Type::build('time'); 
// ...

यह काफी आत्म-व्याख्यात्मक होना चाहिए, TIME कॉलम जिन्हें TimeType में मैप किया जा रहा है , अब उपयोग करेगा App\I18n\FrozenTimeOnly डिफ़ॉल्ट के बजाय Cake\I18n\Time

DateTimeType::$dateTimeClass पदावनत है

इससे निपटने के लिए, एक कस्टम डेटाबेस प्रकार की आवश्यकता होगी, जो काफी सरल भी है।

src/Database/Type/TimeOnlyType.php

namespace App\Database\Type;

use App\I18n\FrozenTimeOnly;
use Cake\Database\Type\TimeType;

class TimeOnlyType extends TimeType
{
    public function __construct($name)
    {
        parent::__construct($name);
        $this->_setClassName(FrozenTimeOnly::class, \DateTimeImmutable::class);
    }
}

यह ध्यान दिया जाना चाहिए कि वर्तमान में यह डेटा/समय वर्ग को दो बार तुरंत चालू करेगा, क्योंकि मूल निर्माता _setClassName() का आह्वान करेगा। वह भी, जहां दिए गए वर्ग का एक उदाहरण तत्काल हो जाएगा।

src/config/bootstrap.php

use App\Database\Type\TimeOnlyType;
Type::map('time', TimeOnlyType::class);

तो यह क्या करेगा, डिफ़ॉल्ट TIME . को ओवरराइड करता है कस्टम \App\Database\Type\TimeOnlyType . का उपयोग करने के लिए मैपिंग टाइप करें वर्ग, जो बदले में \App\I18n\TimeOnly . का उपयोग करेगा क्लास डेटाबेस मानों को PHP ऑब्जेक्ट्स में कनवर्ट करते समय, जो एक स्ट्रिंग में परिवर्तित होने पर, केवल-समय प्रारूप का उपयोग करेगा।

यह भी देखें



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli_query को निष्पादित करने में समस्या आ रही है

  2. MySQL pid समाप्त हो गया (mysql प्रारंभ नहीं कर सकता)

  3. जावा - MySQL डेटाबेस से डेटा प्राप्त करना

  4. MySQL में पंक्तियों को हटाने के लिए क्वेरी हटाएं

  5. MySQL त्रुटि 1449:एक निश्चित के रूप में निर्दिष्ट उपयोगकर्ता मौजूद नहीं है