データベースにテーブルを作成するためのスキーマ定義を含むmymodule.installファイルを作成しました。このテーブルには2つのデータフィールドがあります。これらのフィールドは、ユーザーが特定のコンテンツ(例:ニュースの公開日を特定する)を入力するときに入力されます。今、私は故意に日付提供モジュールを使用しませんでした。他の理由で、これらの2つのフィールドがデータベーステーブルの同じ行にある必要があるためです。
Hook_schemaは、このように2つのフィールドを定義します。
'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,
),
テーブルはデータベースに正しく作成されますが、常にこれらのアドバイスメッセージが表示されます。
フィールドnews_board.pubblish_date:mysqlタイプdatetimeのスキーマタイプはありません。フィールドnews_board.unpublish_date:MySQLタイプの日時のスキーマタイプはありません。 news_board.pubblish_date:スキーマタイプのタイプがありません:normal。フィールドnews_board.pubblish_date:タイプのスキーマタイプがありません。 news_board.unpublish_date:スキーマタイプのタイプがありません:normal。フィールドnews_board.unpublish_date:タイプのスキーマタイプがありません。
奇妙に思えるのは、mysqlデータベースに日時形式を格納するために、ドキュメントでmysql_type仕様を使用するように赤字を付けたためです。
Drupalはネイティブにタイムスタンプをサポートします。異なる日付形式を保存する場合は、yuoが使用しているデータベースに応じて、mysql_typeやpgsql_typeなどの特定の定義を使用する必要があります。
ディスカッションで私はオンラインで多くの人がmysql_type定義を使用していることを発見し、彼らが問題を解決したのを見て、なぜそれが私にとってうまくいかないのですか?
どうもありがとう。
データベースがnotmysqlである場合は、フォールバックタイプ(varchar
)を指定する必要があります。
'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,
),
ただし、表示されるメッセージは Schema モジュールからのものです。この問題はすでに issue#468644 として記録されています。
スキーマでのmysql datetimeの実装は問題ありません。これらのメッセージは無視しても問題ありません。これらの「アドバイスメッセージ」は、Schemaモジュールのバグが原因であると思います。
正式にサポートされているタイプのリストに含まれていないレコードタイプを使用する必要がある場合は、各データベースバックエンドのタイプを指定できます。
この場合、typeパラメータを省略できますが、タイプが指定されていないバックエンドではスキーマの読み込みに失敗することに注意してください。可能な解決策は、「テキスト」タイプをフォールバックとして使用することです。 ( 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', )