| 6 install.php | hook_schema() |
| 7 system.api.php | hook_schema() |
| 8 system.api.php | hook_schema() |
Define the current version of the database schema.
A Drupal schema definition is an array structure representing one or more tables and their related keys and indexes. A schema is defined by hook_schema() which must live in your module's .install file.
This hook is called at both install and uninstall time, and in the latter case, it cannot rely on the .module file being loaded or hooks being known. If the .module file is needed, it may be loaded with drupal_load().
The tables declared by this hook will be automatically created when the module is first enabled, and removed when the module is uninstalled. This happens before hook_install() is invoked, and after hook_uninstall() is invoked, respectively.
By declaring the tables used by your module via an implementation of hook_schema(), these tables will be available on all supported database engines. You don't have to deal with the different SQL dialects for table creation and alteration of the supported database engines.
See the Schema API Handbook at http://drupal.org/node/146843 for details on schema definition structures.
Return value
A schema definition structure array. For each element of the array, the key is a table name and the value is a table structure definition.
Related topics
File
- modules/
system/ system.api.php, line 3027 - Hooks provided by Drupal core and the System module.
Code
<?php
function hook_schema() {
$schema['node'] = array(
// example (partial) specification for table "node"
'description' => 'The base table for nodes.',
'fields' => array(
'nid' => array(
'description' => 'The primary identifier for a node.',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'vid' => array(
'description' => 'The current {node_revision}.vid version identifier.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'type' => array(
'description' => 'The {node_type} of this node.',
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => '',
),
'title' => array(
'description' => 'The title of this node, always treated as non-markup plain text.',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
),
'indexes' => array(
'node_changed' => array('changed'),
'node_created' => array('created'),
),
'unique keys' => array(
'nid_vid' => array('nid', 'vid'),
'vid' => array('vid'),
),
'foreign keys' => array(
'node_revision' => array(
'table' => 'node_revision',
'columns' => array('vid' => 'vid'),
),
'node_author' => array(
'table' => 'users',
'columns' => array('uid' => 'uid'),
),
),
'primary key' => array('nid'),
);
return $schema;
}
?> Login or register to post comments
Comments
Column description not stored in MySQL column comment
The description attribute of a column should be stored as a MySQL column comment.
See this post for more info.
It is not clear what this attribute is used for, in any case.
No need to call drupal_install_schema as of Drupal 7
Database table is automatically created based on schema during module installation so no need to call drupal_install_schema() from hook_install() any more.
See here http://drupal.org/node/224333#install-schema
hook_schema_alter()
It is somehow not mentioned anywhere here, but it exists: http://api.drupal.org/hook_schema_alter
Can I define the database for
Can I define the database for this schema? If I want to store the schema to other database than defaule.
Using multiple databases
Take a look at this: http://api.drupal.org/api/drupal/includes--database--database.inc/functi...