Napisałem plik mymodule.install, który zawiera definicję schematu do utworzenia tabeli w mojej bazie danych. Ta tabela zawiera dwa pola danych. Te pola zostaną wypełnione przez użytkowników, gdy wypełnią określoną treść (na przykład: aby podać datę publikacji wiadomości). Teraz nie użyłem celowo modułu Data, ponieważ potrzebowałem, aby te dwa pola znajdowały się w tym samym wierszu w tabeli bazy danych z innych powodów.
Schemat hook_schema definiuje dwa pola w następujący sposób:
'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,
),
Tabela jest poprawnie utworzona w bazie danych, ale zawsze otrzymuję te wiadomości z poradami:
Pole news_board.pubblish_date: brak typu schematu dla datetime typu mysql. Pole news_board.unpublish_date: brak typu schematu dla datetime typu mysql. news_board.pubblish_date: brak typu dla typu schematu: normal. Pole news_board.pubblish_date: brak typu schematu dla typu. news_board.unpublish_date: brak typu dla typu schematu: normal. Pole news_board.unpublish_date: brak typu schematu dla typu.
Wydaje mi się to dziwne, ponieważ ja w dokumentacji korzystam ze specyfikacji mysql_type w celu przechowywania formatu datetime w bazie danych mysql.
Wiem, że Drupal obsługuje natywnie znaczniki czasu i jeśli chcesz przechowywać inny format daty, musisz użyć określonych definicji, takich jak typ mysql lub typ pgsql, zgodnie z bazą danych, z której korzystasz.
Podczas dyskusji znalazłem w Internecie, że wielu ludzi używało definicji mysql_type i z tego, co widziałem, rozwiązali problem, więc dlaczego to nie działa dla mnie?
Wielkie dzięki.
•Field news_board.pubblish_date: no Schema type for mysql type datetime. •Field news_board.unpublish_date: no Schema type for mysql type datetime.
Jeśli chcesz użyć typu rekordu nieuwzględnionego na oficjalnie obsługiwanej liście typów, możesz określić typ dla każdego zaplecza bazy danych.
W takim przypadku możesz pominąć parametr type, ale pamiętaj, że Twój schemat nie załaduje się dla backendów, które nie mają określonego typu. Możliwym rozwiązaniem może być użycie typu „tekst” jako rezerwowego. ( 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', )
źródło