2012-01-17 10 views
5

Piszę nowy moduł Drupala 7 (Drupal 7.10, Data 7.x-2.0-rc1 zainstalowany, Schemat 7.x-1.0-beta3 zainstalowany) zdefiniowałem tabelę w mymodule. zainstalować:Typ datetime w schemacie Drupala 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'), 
); 

ale uzyskać następujące błędy:

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. 

To samo dotyczy przypadku korzystania

'type' => 'datetime:normal', 

Chciałbym wiedzieć, jak rozwiązać ten problem. Nie chcę przechowywać dat jako znacznika czasu, ponieważ inna osoba napisała dużo kodu i oczywiście nie chcę przepisywać wszystkich. Już obejrzałem drupal 7 custom schema error datetime, ale odpowiedź nie działa. Może robię coś nie tak, ale nie wiem co.

Z góry dziękuję.

Odpowiedz

15

Jeśli spojrzeć w schemacie modułu Data znajdziesz coś

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

Właściwie odpowiedź od Clive był jeden wybrałem pierwszy, ale później dał mi problemy z modułem widoków.

Ta implementacja modułu Data zapisać mój dzień

8

następujące prace dla mnie (Drupal 7.10):

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

(zauważą mysql_type klucz zamiasttype)

Od tej 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 nie jest dozwolony rodzajowy w Drupal 7, więc opuszczenie type Klucz będzie zawsze powodować błąd.

+0

Próbowałem go w nowym module, ale nie utworzyć tabelę, gdy go zainstalować. – user1014351

+0

Czy masz jakieś błędy? – Clive

+0

Próbowałem go w drupal 7.17, ale dostałem błąd: brak typu schematu dla datetime typu mysql. – sumanchalki

0

Date contrib Moduł posiada:

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