วิธีการใช้วันที่ mysql หรือเขตข้อมูลวันที่อย่างถูกต้องใน hook_schema ()?


13

ฉันเขียนไฟล์ mymodule.install ซึ่งมีข้อกำหนด schema เพื่อสร้างตารางในฐานข้อมูลของฉัน ตารางนี้มีสองเขตข้อมูล เขตข้อมูลเหล่านี้จะถูกเติมโดยผู้ใช้เมื่อพวกเขาจะเติมเนื้อหาเฉพาะ (ตัวอย่างเช่น: เพื่อระบุวันที่เผยแพร่สำหรับข่าว) ตอนนี้ฉันไม่ได้ใช้โมดูล Date ที่มีจุดประสงค์ทำให้ฉันต้องการให้ทั้งสองฟิลด์อยู่ในแถวเดียวกันในตารางฐานข้อมูลด้วยเหตุผลอื่น

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,
  ),

ตารางถูกสร้างขึ้นอย่างถูกต้องในฐานข้อมูล แต่ฉันได้รับข้อความแนะนำเหล่านี้เสมอ:

field news_board.pubblish_date: ไม่มี Schema type สำหรับ mysql type datetime field news_board.unpublish_date: ไม่มี Schema type สำหรับ mysql type datetime news_board.pubblish_date: ไม่มีประเภทสำหรับประเภท Schema: ปกติ สนาม news_board.pubblish_date: ไม่มีประเภท Schema สำหรับประเภท news_board.unpublish_date: ไม่มีประเภทสำหรับประเภท Schema: ปกติ สนาม news_board.unpublish_date: ไม่มีประเภท Schema สำหรับประเภท

ดูเหมือนว่าแปลกสำหรับฉันแล้วฉันแดงบนเอกสารเพื่อใช้ข้อมูลจำเพาะ mysql_type เพื่อเก็บรูปแบบวันที่และเวลาในฐานข้อมูล mysql

ฉันรู้ว่า Drupal รองรับการประทับเวลาตามธรรมชาติและหากคุณต้องการจัดเก็บรูปแบบวันที่อื่นคุณต้องใช้คำจำกัดความเฉพาะเช่น mysql_type หรือ pgsql_type ตามฐานข้อมูล yuo ที่ใช้

ในการสนทนาฉันพบว่าผู้คนออนไลน์จำนวนมากใช้คำจำกัดความ 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,
),

อย่างไรก็ตามข้อความที่คุณเห็นมาจากโมดูลSchema ปัญหานี้ได้รับการบันทึกเป็นปัญหา # 468644แล้ว

การใช้งาน mysql datetime ใน schema ของคุณนั้นใช้ได้ คุณสามารถละเว้นข้อความเหล่านี้ได้อย่างปลอดภัย ฉันจะบอกว่า "ข้อความแนะนำ" เหล่านี้เกิดจากข้อผิดพลาดในโมดูล Schema


สวัสดี Gisle ขอขอบคุณสำหรับคำตอบ ผมก็ไม่ได้ปรับเปลี่ยนคุณแนะนำและใช่มันจะสร้างตารางในฐานข้อมูล แต่ฉันยังคงมี adivices นี้: •Field news_board.pubblish_date: no Schema type for mysql type datetime. •Field news_board.unpublish_date: no Schema type for mysql type datetime.
มาร์โก

ใช่ฉันรู้ว่าฉันได้ปิดการใช้งานและถอนการติดตั้ง แต่ผลลัพธ์ก็เหมือนกัน รุ่นหลักที่ฉันใช้คือ 7.22 ฉันต้องการระบุว่าฉันได้ติดตั้งโมดูลสคีมาแล้ว คำแนะนำที่กล่าวถึงปรากฏขึ้นเมื่อฉันพยายามตรวจสอบสคีมาของฐานข้อมูลด้วยโมดูลนี้ สุจริตฉันไม่ได้พยายามตรวจสอบว่าพวกเขายังอยู่ในส่วนอื่น ๆ ของส่วนติดต่อผู้ดูแลระบบ ฉันยังสงสัยด้วยว่าฉันสามารถเพิกเฉยต่อข้อความนี้ได้หรือไม่และสร้างโมดูลต่อไป ฉันไม่รู้ว่าสิ่งนี้จะส่งผลกระทบต่อการทำงานของโมดูลหรือไม่
Marco

ตกลงขอบคุณมากสำหรับเวลาของคุณ Gisle คุณช่วยฉันเยอะมาก!
Marco

0

หากคุณต้องการใช้ประเภทระเบียนที่ไม่รวมอยู่ในรายการประเภทที่สนับสนุนอย่างเป็นทางการคุณสามารถระบุประเภทสำหรับแบ็กเอนด์ฐานข้อมูลแต่ละรายการ

ในกรณีนี้คุณสามารถออกจากพารามิเตอร์ประเภท แต่ได้รับคำแนะนำว่าสคีของคุณจะไม่สามารถโหลดในแบ็กเอนด์ที่ไม่ได้ระบุประเภท วิธีแก้ปัญหาที่เป็นไปได้คือการใช้ประเภท "text" เป็นทางเลือก ( 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', )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.