How do I create a table when a module is installed?
-
26-02-2021 - |
Question
I want to add a custom table when a module I develop is installed. The code I am using doesn't seem to work, as the post table isn't created.
What is wrong with the code I am using?
/**
* Installs the database schema.
*/
function mymodule_install() {
drupal_install_schema('post');
}
/**
* Uninstalls the database schema.
*/
function mymodule_uninstall() {
drupal_uninstall_schema('post');
}
/**
* Creates the tables using the schema API.
*/
function mymodule_schema() {
$schema['post'] = array(
'description' => 'description pour la table post',
'fields' => array(
'pid' => array(
'description' => 'post id',
'type' => 'int',
'not null' => TRUE,
),
'title' => array(
'description' => 'title',
'type' => 'varchar',
'not null' => TRUE,
),
'body' => array(
'description' => 'body',
'type' => 'varchar',
'not null' => TRUE,
),
'created' => array(
'description' => 'created',
'not null' => TRUE,
'mysql_type' => 'timestamp',
),
'primary key' => array('pid'),
),
);
}
Solution
I see two problems with your hook_schema
implementation.
- You are missing a
return
statement at the end of your function to return the schema. primary_key
needs to be outside the fields array on the same level as thefields
and thedescription
.
/**
* Implements hook_schema().
*/
function MYMODULE_schema() {
$schema['post'] = [
'description' => 'description pour la table post',
'fields' => [
'pid' => [
'description' => 'post id',
'type' => 'int',
'not null' => TRUE,
],
'title' => [
'description' => 'title',
'type' => 'varchar',
'not null' => TRUE,
],
'body' => [
'description' => 'body',
'type' => 'varchar',
'not null' => TRUE,
],
'created' => [
'description' => 'created',
'not null' => TRUE,
'mysql_type' => 'timestamp',
],
],
// primary_key needs to be outside the fields array.
'primary key' => ['pid'],
];
// Don't forget to return the schema.
return $schema;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with drupal.stackexchange