हुक_स्केमा () में सही तरीके से mysql दिनांक या डेटाटाइम फ़ील्ड कैसे लागू करें?


13

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

Hook_schema दो क्षेत्रों को इस तरह परिभाषित करता है:

'pubblish_date' => array(
    'description' => t('The pubblish date for the single news'),
    'mysql_type' => 'datetime',
    'not null' => FALSE,
  ),
  'unpublish_date' => array(
    'description' => t('The unpublish date for the single news'),
    'mysql_type' => 'datetime',
    'not null' => FALSE,
  ),

तालिका को डेटाबेस में सही ढंग से बनाया गया है, लेकिन मुझे हमेशा वेसे सलाह संदेश मिलते हैं:

फ़ील्ड news_board.pubblish_date: mysql प्रकार डेटाटाइम के लिए कोई स्कीमा प्रकार नहीं। फ़ील्ड news_board.unpublish_date: mysql प्रकार डेटाटाइम के लिए कोई स्कीमा प्रकार नहीं। news_board.pubblish_date: स्कीमा प्रकार के लिए कोई प्रकार नहीं: सामान्य। फ़ील्ड news_board.pubblish_date: प्रकार के लिए कोई स्कीमा प्रकार नहीं। news_board.unpublish_date: स्कीमा प्रकार के लिए कोई प्रकार नहीं: सामान्य। फ़ील्ड news_board.unpublish_date: प्रकार के लिए कोई स्कीमा प्रकार नहीं।

मेरे लिए अजीब लगता है क्योंकि मैं mysql_type विनिर्देशन का उपयोग करने के लिए दस्तावेज़ीकरण पर लाल हूं, ताकि mysql डेटाबेस में डेटाटाइम प्रारूप संग्रहीत कर सकूं।

मुझे पता है कि Drupal मूल रूप से टाइमस्टैम्प का समर्थन करता है और यदि आप एक अलग दिनांक प्रारूप को संग्रहीत करना चाहते हैं तो आपको डेटाबेस के अनुसार mysql_type या pgsql_type जैसी विशिष्ट परिभाषाओं का उपयोग करना होगा।

चर्चाओं में मैंने पाया कि बहुत से लोगों ने mysql_type परिभाषा का उपयोग किया और जो मैंने देखा कि उन्होंने समस्या को हल किया है, इसलिए यह मेरे लिए काम क्यों नहीं करता है?

बहुत बहुत धन्यवाद।

जवाबों:


12

आपको varcharउस केस के लिए फ़ॉलबैक प्रकार ( ) प्रदान करना चाहिए जो डेटाबेस mysql नहीं है

'pubblish_date' => array(
  'description' => t('The pubblish date for the single news'),
  'type' => 'varchar',
  'mysql_type' => 'datetime',
  'not null' => FALSE,
),
'unpublish_date' => array(
  'description' => t('The unpublish date for the single news'),
  'type' => 'varchar',
  'mysql_type' => 'datetime',
  'not null' => FALSE,
),

हालाँकि, आपके द्वारा देखे गए संदेश स्कीमा मॉड्यूल से आते हैं । यह समस्या पहले से ही # 468644 अंक के रूप में दर्ज है ।

आपके स्कीमा में mysql डेटाइम का कार्यान्वयन ठीक है। आप इन संदेशों को सुरक्षित रूप से अनदेखा कर सकते हैं। मैं कहूंगा कि ये "सलाह संदेश" स्कीमा मॉड्यूल में एक बग के कारण होते हैं।


हाय गिस्ले, उत्तर के लिए धन्यवाद। मैंने केवल आपके द्वारा सुझाया गया संशोधन किया और हाँ, यह डेटाबेस में तालिका बनाता है, लेकिन मुझे अभी भी यह सलाह मिली है: •Field news_board.pubblish_date: no Schema type for mysql type datetime. •Field news_board.unpublish_date: no Schema type for mysql type datetime.
Marco

हां मुझे पता है, मैंने इसे अक्षम और अनइंस्टॉल कर दिया है लेकिन परिणाम समान है। मेरे द्वारा उपयोग किया जा रहा मुख्य संस्करण 7.22 है। मैं निर्दिष्ट करना चाहता हूं कि मेरे पास स्कीमा मॉड्यूल भी स्थापित है। उल्लिखित सलाह तब दिखाई देती है जब मैं इस मॉड्यूल के साथ डेटाबेस के स्कीमा का निरीक्षण करने की कोशिश करता हूं। ईमानदारी से मैंने यह जांचने की कोशिश नहीं की कि क्या वे भी व्यवस्थापक इंटरफ़ेस के दूसरे भाग में हैं। मैं यह भी सोच रहा हूं कि क्या मैं इस बिंदु पर इस संदेश को अनदेखा कर सकता हूं और मॉड्यूल का निर्माण जारी रख सकता हूं। मुझे नहीं पता कि यह मॉड्यूल की कार्यक्षमता को प्रभावित करेगा या नहीं।
मार्को

ठीक है, अपने समय गिसले के लिए बहुत बहुत धन्यवाद, आपने मेरा बहुत कुछ बचाया!
मार्को

0

यदि आपको आधिकारिक रूप से समर्थित सूची में शामिल रिकॉर्ड प्रकार का उपयोग करने की आवश्यकता है, तो आप प्रत्येक डेटाबेस बैकएंड के लिए एक प्रकार निर्दिष्ट कर सकते हैं।

इस स्थिति में, आप टाइप पैरामीटर को छोड़ सकते हैं, लेकिन सलाह दी जाती है कि आपका स्कीमा बैकएंड पर लोड करने में विफल हो जाएगा जिसमें एक प्रकार निर्दिष्ट नहीं है। एक संभावित समाधान "टेक्स्ट" प्रकार का उपयोग कमबैक के रूप में किया जा सकता है। ( Https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21database.api.php/group/schemaapi/8.2.x )

'submit_date' => array( 'type' => 'varchar', 'mysql_type' => 'datet', )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.