¿Cómo implementar un campo mysql date o datetime correctamente en hook_schema ()?


13

He escrito un archivo mymodule.install que contiene una definición de esquema para crear una tabla en mi base de datos. Esta tabla contiene dos campos de datos. Los usuarios rellenarán estos campos cuando completen el contenido específico (por ejemplo: para especificar una fecha de publicación para una noticia). Ahora no utilicé el módulo Fecha contribuido a propósito, porque necesitaba que estos dos campos estuvieran en la misma fila en la tabla de la base de datos por otras razones.

Hook_schema define los dos campos de esta manera:

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

La tabla se crea correctamente en la base de datos, pero siempre recibo estos mensajes de consejos:

Campo news_board.pubblish_date: sin tipo de esquema para mysql type datetime. Campo news_board.unpublish_date: sin tipo de esquema para mysql type datetime. news_board.pubblish_date: sin tipo para el tipo de esquema: normal. Campo news_board.pubblish_date: sin tipo de esquema para tipo. news_board.unpublish_date: sin tipo para el tipo de esquema: normal. Campo news_board.unpublish_date: sin tipo de esquema para el tipo.

Me parece extraño porque enrojecí en la documentación para usar la especificación mysql_type para almacenar el formato de fecha y hora en la base de datos mysql.

Sé que Drupal admite marcas de tiempo nativas y si desea almacenar un formato de fecha diferente, debe usar definiciones específicas como mysql_type o pgsql_type de acuerdo con la base de datos que está usando.

En las discusiones encontré que muchas personas en línea usaban la definición de mysql_type y, por lo que vi, resolvieron el problema, entonces, ¿por qué no funciona para mí?

Muchas gracias.

Respuestas:


12

Debe proporcionar un tipo de reserva ( varchar) para el caso de que la base de datos no sea 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,
),

Sin embargo, los mensajes que ve provienen del módulo Esquema . Este problema ya está registrado como problema # 468644 .

La implementación de mysql datetime en su esquema está bien. Puede ignorar estos mensajes de forma segura. Diría que estos "mensajes de aviso" son causados ​​por un error en el módulo Schema.


Hola Gisle, gracias por la respuesta. Acabo de hacer la modificación que sugirió y sí, crea la tabla en la base de datos pero todavía recibo estos consejos: •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

Sí, lo sé, lo he desactivado y desinstalado, pero el resultado es el mismo. La versión principal que estoy usando es la 7.22. Quiero especificar que también tengo instalado el módulo de esquema. Los consejos mencionados aparecen cuando intento inspeccionar el esquema de la base de datos con este módulo. Honestamente, no intenté verificar si aparecen también en otra parte de la interfaz de administración. También me pregunto si puedo ignorar estos mensajes en este punto y continuar construyendo el módulo. No sé si esto afectará la funcionalidad del módulo en sí.
Marco

OK, muchas gracias por tu tiempo, Gisle, ¡ahorraste mucho mío!
Marco

0

Si necesita usar un tipo de registro no incluido en la lista de tipos oficialmente admitidos, puede especificar un tipo para cada servidor de base de datos.

En este caso, puede omitir el parámetro de tipo, pero tenga en cuenta que su esquema no se cargará en backends que no tienen un tipo especificado. Una posible solución puede ser usar el tipo "texto" como alternativa. ( 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', )

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.