2012-01-17 22 views
5

Estoy escribiendo un nuevo módulo de Drupal 7 (Drupal 7.10, Fecha 7.x-2.0-rc1 instalado, Schema 7.x-1.0-beta3 instalado) definí una tabla en mymodule. instalar:Tipo de fecha y hora en el esquema Drupal 7

$schema['museums_tickets']= array(
    'fields' => array(
     'nid' => array(
     'type' => 'int', 
     'unsigned' => TRUE, 
     'not null' => TRUE, 
    ), 
    'day' => array(
     'type' => 'datetime', 
     'mysql_type' => 'DATETIME', 
     'not null' => TRUE, 
    ), 
    'tickets' => array(
     'type' => 'int', 
     'unsigned' => TRUE, 
     'not null' => TRUE, 
     ), 
    'ticket_code' => array(
      'type' => 'varchar', 
      'length' => 32, 
      'not null' => TRUE, 
      'default' => '', 
     ), 
    ), 
    'primary key' => array('nid', 'day','ticket_code'), 
); 

pero obtengo los siguientes errores:

Field museums_tickets.day: no Schema type for mysql type datetime. 
museums_tickets.day: no type for Schema type datetime. 
Field museums_tickets.day: no Schema type for type datetime. 

lo mismo se aplica si uso

'type' => 'datetime:normal', 

Me gustaría saber cómo resolver este problema. No quiero almacenar fechas como timestamp, ya que otra persona escribió mucho código y obviamente no quiero reescribirlo todo. Ya miré drupal 7 custom schema error datetime pero la respuesta no funciona. Tal vez estoy haciendo algo mal, pero no encuentro qué.

Gracias de antemano.

Respuesta

15

Si nos fijamos en el esquema del módulo fecha se dará cuenta de algo así como

'day' => array(
    'type' => 'datetime', 
    'mysql_type' => 'datetime', 
) 

En realidad la respuesta de Clive fue el que tomó por primera vez, pero más tarde me dio problemas con el módulo de Vistas.

Esta implementación del módulo de la fecha guardar mi día

8

las siguientes obras para mí (Drupal 7.10):

'day' => array(
    'mysql_type' => 'DATETIME', 
    'not null' => TRUE, 
) 

(Note la mysql_type clave en lugar detype)

Desde el Schema docs:

If you need to use a record type not included in the officially supported list of types above, you can specify a type for each database backend. In this case, you can leave out the type parameter

datetime no es un tipo genérico permitido en Drupal 7 por lo que dejar el type tecla siempre habrá un error.

+0

Lo he probado en un nuevo módulo, pero no crea la tabla cuando se instale. – user1014351

+0

Obtiene cualquier error – Clive

+0

lo intenté en drupal 7.17 pero me dieron error: no hay tipo de esquema para mysql tipo datetime. – sumanchalki

0

La Fecha módulo contrib tiene:

function date_field_schema($field) { 
    $db_columns = array(); 
    switch ($field['type']) { 
    case 'datestamp': 
     $db_columns['value'] = array(
     'type' => 'int', 
     'not null' => FALSE, 
     'sortable' => TRUE, 
     'views' => TRUE, 
    ); 
     break; 

    case 'datetime': 
     $db_columns['value'] = array(
     'type' => 'datetime', 
     'mysql_type' => 'datetime', 
     'pgsql_type' => 'timestamp without time zone', 
     'sqlite_type' => 'varchar', 
     'sqlsrv_type' => 'smalldatetime', 
     'not null' => FALSE, 
     'sortable' => TRUE, 
     'views' => TRUE, 
    ); 
     break; 

    default: 
     $db_columns['value'] = array(
     'type' => 'varchar', 
     'length' => 20, 
     'not null' => FALSE, 
     'sortable' => TRUE, 
     'views' => TRUE, 
    ); 
     break; 
    } 
Cuestiones relacionadas