日付フィールドのcurrent_timestamp


8

drupalデータベーススキーマにcurrent_timestampまたはnow for dateフィールドを追加するにはどうすればよいですか。

        'created' => array(
            'description' => t('Timestamp when the fee schedule was added.'),
            'type' => 'int',
            'not null' => TRUE,
            'unsigned' => TRUE,
        ),

1
user.moduleを検索しました。Drupalは$ array ['created'] = time();のように作成されたファイルを保存しています。
niksmac

回答:


6

次のmysql_type属性を使用して、MySQLのドライバー固有の列タイプを指定できます。

function MYMODULE_schema (){
  $schema['table_name'] = array(
    'fields' => array(
      'created' => array(
        'mysql_type' => 'timestamp',
        'not null' => TRUE
      )
    )
  );

  return $schema;
}

次に、モジュールを有効にすると、列を変更してデフォルト/更新時の動作を追加できます。

function MYMODULE_enable() {
  db_query('
    ALTER TABLE {table_name} 
    MODIFY created TIMESTAMP NOT NULL 
    DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP'
  );
}

私はDrupal 7でそれをテストしたところ、ごちそうになりました。

注:レコードが更新されるたびにタイムスタンプを更新したくない場合ON UPDATE CURRENT_TIMESTAMPは、クエリの一部を削除してください。


1

MySQLを参照していると思いますが、ドキュメントから直接調べたい機能はタイムスタンプです。

これはおそらく、スキーマによって作成されたdbテーブルを、探しているフィールドタイプに更新します。

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Drupal 8ではタイムスタンプのサポートが必要であると述べたこの投稿につまずいたので、おそらくD7ではそのままではサポートされていないと思います(そして私は間違っていると思います)。配列のタイプをTIMESTAMPに変更して、何が得られるかを確認してください。ただし、D7スキーマAPIを使用してこれを実行することはできません。

更新:

実際、投稿を見てください。パッチはD7のタイムスタンプにサポートを追加します。主な名声をするdrupalshrekたちでこれを共有するため。

パッチが適用されると、データベーススキーマは次のようになります。

<?php
$schema['vchess_moves'] = array(
  'description' => 'Contains the list of moves for each game',
  'fields' => array(
    'timestamp' => array(
    'description' => 'Exact date and time of the move',
    'type' => 'timestamp',
    'not null' => TRUE,
?>

パッチについては上記の投稿を参照してください。彼の投稿はここでは再投稿しませんが、それが適切かどうかはわかりません。

これが幸せなコーディングに役立つことを願っています。


0

Drupal 8.6.xの解決策を次に示します。誰かが私と同じように見えている場合に備えてください:)

'created' => [
  'mysql_type' => 'timestamp',
  'not null' => TRUE,
  'mysql_default' => CURRENT_TIMESTAMP,
 ],

これは...と同等です

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.