Як правильно реалізувати поле mysql дата або час дати у кука_schema ()?


13

Я написав файл mymodule.install, який містить визначення схеми для створення таблиці в моїй базі даних. Ця таблиця містить два поля даних. Ці поля будуть заповнені користувачами, коли вони заповнять конкретний вміст (приклад: вказати дату публікації для новин). Тепер я спеціально не використовував модуль, внесений датою, тому що мені потрібно було, щоб ці два поля були в одному рядку в таблиці бази даних з інших причин.

Прив'язка_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 відповідно до бази даних, яку використовуєте 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,
),

Однак повідомлення, які ви бачите, надходять із модуля схеми . Ця проблема вже записана як випуск № 468644 .

Реалізація mysql datetime у вашій схемі чудово. Ви можете сміливо ігнорувати ці повідомлення. Я б сказав, що ці "поради повідомлень" викликані помилкою в модулі Schema.


Привіт Жисле, дякую за відповідь. Я щойно зробив запропоновану вами модифікацію, і так, вона створює таблицю в базі даних, але я все-таки отримав такі поради:•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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.