web-dev-qa-db-ja.com

MySQLの日付または日時フィールドをhook_schema()に正しく実装するにはどうすればよいですか?

データベースにテーブルを作成するためのスキーマ定義を含む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定義を使用していることを発見し、彼らが問題を解決したのを見て、なぜそれが私にとってうまくいかないのですか?

どうもありがとう。

13
Marco

データベースが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モジュールのバグが原因であると思います。

12
Free Radical

正式にサポートされているタイプのリストに含まれていないレコードタイプを使用する必要がある場合は、各データベースバックエンドのタイプを指定できます。

この場合、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', )

0
PADMAJA SONWANE