Programmieren > Programme > Magento 2 > neue Datenbanktabelle

Neue Datenbanktabelle anlegen

Die Erklärungen auf dieser Seite bauen auf der Seite Modul bauen auf. Wer noch nicht weis, wie man ein Magento-Modul baut. Sollte zuerst das erlernen, bevor er hier weiterliest.

Wenn man in Magento seine eigenen Tabellen anlegt, dann werden diese zu den weit über hundert Tabellen hinzugefügt. Jedes Modul das installiert wird kann nochmals Tabellen hinzufügen. Damit man in dieser Liste die eigenen Tabellen wiederfindet, verwende ich folgenden Trick. Ich beginne alle Tabellen die ich erstelle mit einem einheitlichen Prefix. Auf diese Weise erscheinen alle meine Tabellen in der Liste der Tabellen an derselben Stelle. Ich verwende für mich das Prefix ew_ und deshalb heist die Tabelle hier im Beispiel ew_friend.

<?php

namespace ErichWeigand\HelloWorld\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

class InstallSchema implements InstallSchemaInterface
{
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup();

        $table = $installer->getConnection()->newTable(
            $installer->getTable('ew_friend')
        )->addColumn(
            'id',
            \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
            null,
            ['identity' => true, 'nullable' => false, 'primary' => true],
            'ID'
        )->addColumn(
            'name',
            \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            255,
            ['nullable' => false],
            'Name'
        )->setComment(
            'Freundestabelle'
        );

        $installer->getConnection()->createTable($table);
        $installer->endSetup();
    }
}

Nach dem Erstellen der Klasse muss der Befehl php bin/magento setup:upgrade ausgeführt werden, damit die Tabelle auch tatsächlich angelegt wird.

Achtung: Dies funktioniert nur, wenn das Modul ganz neu, d.h. vorher noch nicht registriert war. Ist das Modul schon vorher einmal registriert worden, muss Magento vorgegaukelt werden, das Modul sei nagelneu, sonst wird die Tabelle nicht angelegt. Dies funktioniert, indem man in der Tabelle setup_module die Zeile zu dem Modul löscht. Dann wird beim nächsten Aufruf von setup:upgrade die Tabelle angelegt.

Um die Tabelle in Magento verwenden zu können, müssen bestimmte PHP-Klassen angelegt werden. Dies wird auf der Seite Tabelle verwenden. beschrieben.