2012-01-17 3 views
5

Sto scrivendo un nuovo modulo Drupal 7 (Drupal 7.10, Data 7.x-2.0-rc1 installato, Schema 7.x-1.0-beta3 installato) ho definito una tabella in mymodule. installare:tipo DateTime in Drupal 7 schema

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

ma ottengo i seguenti errori:

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 stesso vale se uso

'type' => 'datetime:normal', 

Mi piacerebbe sapere come risolvere questo problema. Non voglio memorizzare le date come timestamp, poiché un'altra persona ha scritto molto codice e ovviamente non voglio riscrivere tutto. Ho già visto drupal 7 custom schema error datetime ma la risposta non funziona. Forse sto facendo qualcosa di sbagliato, ma non trovo cosa.

Grazie in anticipo.

risposta

15

Se si guarda nello schema del modulo Data troverete qualcosa di simile

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

In realtà la risposta di Clive era quello ho scelto prima, ma poi mi ha dato problemi con il modulo Viste.

Questa implementazione del modulo Data salvare il mio giorno

8

le seguenti opere per me (Drupal 7.10):

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

(notare la mysql_type chiave invece ditype)

Dal 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 non è un tipo generico consentito in Drupal 7, quindi lasciare il La chiave type causerà sempre un errore.

+0

ho provato in un nuovo modulo, ma non crea il tavolo quando installarlo. – user1014351

+0

Hai ricevuto degli errori – Clive

+0

l'ho provato in drupal 7.17 ma ho ottenuto un errore: nessun tipo di schema per tipo mysql datetime. – sumanchalki

0

La Data di modulo contrib ha:

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; 
    }