Drupal 8 - dodanie tabeli do bazy danych w module
Kolejny artykuł z cyklu tworzenia modułów do Drupala. Tym razem pokażę jak we własnym module dodać tabelę do bazy danych. Należy utworzyć plik my_module.install w katalogu głównym modułu. W celu utworzenia własnej tabeli potrzebujesz przynajmniej metody hook_schema() w pliku my_module.install. również używamy poniżej hook_install(), która jest wywoływana po hook_schema(), aby dodać kilka przykładowych rekordów do naszej tabeli mymodule_managers.
Tabela jest tworzona w momencie instalacji modułu. Natomiast podczas deinstalacji jest usuwana.
- <?php
- /**
- * hook_schema()
- */
- function my_module_schema() {
- $schema['mymodule_managers'] = array(
- 'description' => 'Store managers',
- 'fields' => array(
- 'pid' => array(
- 'type' => 'serial',
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique manager ID.',
- ),
- 'uid' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => "Creator user's {users}.uid",
- ),
- 'name' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Name of the manager.',
- ),
- 'age' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'size' => 'tiny',
- 'description' => 'The age of the manager in years.',
- ),
- ),
- 'primary key' => array('pid'),
- 'indexes' => array(
- 'name' => array('name'),
- 'age' => array('age'),
- ),
- );
- return $schema;
- }
- /**
- * hook_install()
- */
- function my_module_install() {
- $values = [
- [
- 'name' => 'Paul',
- 'age' => 30,
- 'uid' => 1,
- ],
- [
- 'name' => 'Jan',
- 'age' => 40,
- 'uid' => 1,
- ],
- ];
- $database = \Drupal::database();
- $query = $database->insert('mymodule_managers')->fields(['name', 'age', 'uid']);
- foreach ($values as $m) {
- $query->values($m);
- }
- $query->execute();
- }