Magento2 InstallSchema thêm cột mới vào bảng hiện có


11

Tôi đang cố gắng thêm cột mới vào bảng hiện có trong magento2

<?php

namespace Vendor\Module\Setup;

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

/**
 * @codeCoverageIgnore
 */
class InstallSchema implements InstallSchemaInterface
{

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;

        $installer->startSetup();

        $eavTable = $installer->getTable('eav_attribute');

        $columns = [
            'my_column' => [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                'length' => '1',
                'nullable' => false,
                'comment' => 'Description of my column',
            ],
        ];

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

        $installer->endSetup();
    }
}

Thiết lập php bin / magento: nâng cấp

Chẳng có gì xảy ra

Cập nhật 1.

Nếu tôi hiểu rõ mục tiêu, InstallSchema chỉ thực thi khi không có bất kỳ giá trị nào trong bảng thiết lập. Nếu mô-đun của bạn đã được cài đặt trong hệ thống - bạn cần thực hiện bất kỳ thay đổi nào trong Nâng cấp. Điều đó bởi vì tập tin của tôi đã không thực hiện. Khi tôi đổi tên nó để nâng cấp và thực hiện các thay đổi cần thiết - mọi thứ bắt đầu hoạt động bình thường

Câu trả lời:


7

Đầu tiên, tôi giả sử khi bạn nói rằng không có gì xảy ra, bạn có nghĩa là tập lệnh thiết lập chạy như bình thường, nhưng không có lỗi nào được đưa ra và không có thay đổi nào được thực hiện cho cơ sở dữ liệu của bạn. Nếu đây không phải là một giả định chính xác, xin vui lòng cho tôi biết!

Khi tôi nâng cấp lên lược đồ, tôi không làm getTable(), tôi nghĩ rằng điều đó là thừa.

Tôi đã thử nghiệm kịch bản trên với thay đổi đó và nó đã hoạt động, vì vậy hai bước khắc phục sự cố tôi sẽ thực hiện là:

  1. Đảm bảo rằng bạn đã tăng Bộ setup_versiontrong của bạn module.xml(hoặc kịch bản của bạn sẽ không chạy ở tất cả)
  2. Thêm một số lỗi rõ ràng trong tập lệnh nâng cấp của bạn để xem nó có đang chạy không ... nếu có lỗi và tập lệnh đang chạy, bạn sẽ nhận được thông báo lỗi khi chạy setup:upgrade

Tôi hy vọng điều đó sẽ giúp!


1
Cảm ơn bạn đã phản hồi của bạn. Nếu tôi hiểu rõ mục tiêu, InstallSchema chỉ thực thi khi không có bất kỳ giá trị nào trong bảng thiết lập. Nếu mô-đun của bạn đã được cài đặt trong hệ thống - bạn cần thực hiện bất kỳ thay đổi nào trong Nâng cấp. Điều đó bởi vì tập tin của tôi đã không thực thi. Khi tôi đổi tên nó để nâng cấp và thực hiện các thay đổi cần thiết - mọi thứ bắt đầu hoạt động bình thường
zhartaunik

Tôi xin lỗi, điều đó đúng 100%, bước 1 nên xóa mục nhập khỏi bảng setup_module hoặc biến nó thành tập lệnh nâng cấp. Tôi rất vui vì nó làm việc cho bạn!
Jer_

0

Xóa mục nhập mô-đun khỏi bảng 'setup_module', sau đó chạy lệnh php bin / magento setup: nâng cấp. Nó sẽ làm việc.


0

bạn có thể tạo một tập lệnh và trong thư mục dbscripts của bạn và chạy tệp này từ thiết bị đầu cuối hoặc trình duyệt web.

ví dụ: lưu tệp trong pub/dbscripts/filename.phpdán mã này và thay đổi theo yêu cầu của bạn

<?php
use Magento\Framework\App\Bootstrap;
require '../../app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();

$salesTable = $resource->getTableName('Table_Name');
$sql = "ALTER TABLE ".$salesTable. " ADD `Field_name` varchar(255)";
$connection->query($sql);

echo"Script Run Successfully";

chạy tệp này từ trình duyệt như

domain.name/pub/dbscripts/filename.php
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.