Magento2: Jak zaktualizować schemat bazy danych

29

Pracuję nad niestandardowym modułem magento, w module mam Setup\InstallSchema.phpplik, który jest wcześniej instalowany. dodałem więcej pól bazy danych, InstallSchema.phpwięc chcę zaktualizować strukturę tabeli, ale tabela nie zastosowała żadnych zmian.

Jak mogę zastosować zmiany schematu do tabeli bazy danych?

Mam polecenia cli do aktualizacji schematu, ale nie powiodło się.

php bin/magento setup:db-schema:upgrade

i

php bin/magento setup:upgrade
Suresh Chikani
źródło
Możesz odinstalować za pomocą „modułu php bin / magento: odinstaluj” i ponownie zainstalować rozszerzenie. Kolejny punkt, aby sprawdzić, czy jest to UpgradeSchema.php, takie jak github.com/magento/magento2/commit/... Wygląda na to, że w tej chwili nie ma jasnego wyjaśnienia, jak zaktualizować bazę danych, więc również czekam na poprawną odpowiedź tutaj
FireBear
@FireBear poniżej kod odpowiedzi?
Suresh Chikani,
jeszcze nie próbuj, ale wygląda poprawnie zgodnie z próbką z głównego modułu katalogu github.com/magento/magento2/blob/…
FireBear
W większości przypadków błąd wynika z braku zdefiniowanej przestrzeni nazw dla klasy. Sprawdź, czy zdefiniowałeś przestrzeń nazw dla swojej klasy.
soukaina

Odpowiedzi:

48

Jeśli chcesz dodać więcej kolumn do istniejącej tabeli modułu, możesz wykonać następujące czynności.

Krok 1: Utwórz UpgradeSchema.php w folderze Instalatora. Uzyskaj pomysł z następującego kodu.

namespace Vendor\ModuleName\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class UpgradeSchema implements  UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup,
                            ModuleContextInterface $context){
        $setup->startSetup();
        if (version_compare($context->getVersion(), '1.0.1') < 0) {

            // Get module table
            $tableName = $setup->getTable('table_name');

            // Check if the table already exists
            if ($setup->getConnection()->isTableExists($tableName) == true) {
                // Declare data
                $columns = [
                    'imagename' => [
                        'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                        'nullable' => false,
                        'comment' => 'image name',
                    ],
                ];

                $connection = $setup->getConnection();
                foreach ($columns as $name => $definition) {
                    $connection->addColumn($tableName, $name, $definition);
                }

            }
        }

        $setup->endSetup();
    }
}

Krok 2: Zmień setup_versionwartość wmodule.xml

Krok 3: Uruchom php bin/magento setup:upgradepolecenie z interfejsu CLI

Praful Rajput
źródło
1
czy możesz wyjaśnić, jak mogę dodać klucz podstawowy za pomocą skryptu aktualizacji? w mojej tabeli mam „customer_id”, ale nie jest to klucz podstawowy, teraz chcę go dodać jako klucz podstawowy.
Suresh Chikani,
Tak, możesz to zmienić za pomocą funkcji editColumnByDdl (). Poniżej znajduje się schemat. `funkcja publiczna modyfikuj kolumnę ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput
Jak mogę zastosować pole „custome_id” jako klucz podstawowy? wyjaśnij kod przykładowy.
Suresh Chikani,
Czy możesz dodać „Jak możemy zmodyfikować typ istniejącej kolumny?” w twoim pytaniu?
Praful Rajput,
3
@Keyur Shah, nie musisz tworzyć nowego pliku M2. Musisz wstawić następujący kod do UpgradeSchema.php i zaktualizować setup_version również do module.xml. if (version_compare ($ kontekst-> getVersion (), '1.0.0') <0) {// kodujesz} if (version_compare ($ kontekst-> getVersion (), '1.0.1') <0) {/ / your code}
Praful Rajput,
2

Aby zaktualizować schemat instalatora, musisz napisać „UpgradeSchema.php”,

przykład UpgradeSchema.php:

namespace <namespace>\<modulename>\Setup;

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

/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
    /**
 * {@inheritdoc}
 */
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $installer = $setup;

    $installer->startSetup();

    /*your code here*/

    $installer->endSetup();
}
}

Krok 2: W swoim module znajdziesz plik module.xml w folderze etc w tym pliku zmień wartość setup_version (np. 1.0.1 na 1.0.2) wartość wersji powinna być wyższa niż bieżąca wartość wersji.

Krok 3: Uruchom konfigurację php bin / magento: polecenie aktualizacji z CLI

Sheshgiri Anvekar
źródło