Magento2: Cách nâng cấp lược đồ cơ sở dữ liệu


29

Tôi đang làm việc trên mô-đun tùy chỉnh magento, trong mô-đun có Setup\InstallSchema.phptệp được cài đặt trước đó. tôi đã thêm một số trường cơ sở dữ liệu vào InstallSchema.phpvì vậy tôi muốn cập nhật cấu trúc bảng nhưng bảng không áp dụng bất kỳ thay đổi nào.

Làm thế nào tôi có thể áp dụng các thay đổi lược đồ cho bảng cơ sở dữ liệu?

Tôi có các lệnh cli để cập nhật lược đồ nhưng không thành công.

php bin/magento setup:db-schema:upgrade

php bin/magento setup:upgrade

Bạn có thể gỡ cài đặt với "mô-đun php bin / magento: gỡ cài đặt" và cài đặt lại tiện ích mở rộng của bạn. Một điểm khác để kiểm tra đó là Nâng cấpSchema.php như github.com/magento/magento2/commit/ Từ Có vẻ như tại thời điểm này không có giải thích rõ ràng về cách nâng cấp cơ sở dữ liệu, vì vậy tôi cũng mong được trả lời chính xác tại đây
FireBear

@FireBear appy dưới đây trả lời mã?
Suresh Chikani

chưa thử, nhưng có vẻ đúng theo mẫu từ mô-đun lõi Danh mục github.com/magento/magento2/blob/
mẹo

Hầu hết thời gian, lỗi xuất phát từ việc không có một không gian tên được xác định cho lớp. Kiểm tra xem bạn đã xác định một không gian tên cho lớp của bạn chưa.
soukaina

Câu trả lời:


48

Nếu bạn muốn thêm nhiều cột vào bảng hiện có của mô-đun, bạn có thể làm như sau.

Bước 1: Tạo Nâng cấpSchema.php trong thư mục Cài đặt. Lấy ý tưởng từ mã sau đây.

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();
    }
}

Bước 2: Thay đổi setup_versiongiá trị trongmodule.xml

Bước 3: Chạy php bin/magento setup:upgradelệnh từ CLI


1
bạn có thể giải thích làm thế nào tôi có thể thêm khóa chính bằng cách sử dụng tập lệnh nâng cấp không? trong bảng của tôi có 'customer_id' nhưng bây giờ nó không phải là khóa chính, tôi muốn thêm nó làm khóa chính.
Suresh Chikani

Có, bạn có thể thay đổi nó bằng hàm redirectColumnByDdl (). Sau đây là lược đồ. `chức năng công cộng Sửa đổiColumn ($ tableName, $ cộtName, $ định nghĩa, $ flushData = false, $ giản lược = null);`
Rajput

Làm cách nào tôi có thể áp dụng trường 'oblome_id' làm khóa chính? giải thích mã exanple.
Suresh Chikani

Bạn có thể vui lòng Thêm "Làm thế nào chúng ta có thể sửa đổi loại cột hiện tại?" trong câu hỏi của bạn?
Rajput đáng khen ngợi

3
@Keyur Shah, bạn không cần tạo tệp M2 mới. Bạn cũng phải đặt đoạn mã sau vào nâng cấpSchema.php và cập nhật setup_version vào module.xml. if (version_compare ($ bối cảnh-> getVersion (), '1.0.0') <0) {// bạn mã} if (version_compare ($ bối cảnh-> getVersion (), '1.0.1') <0) {/ / mã của bạn}
Rajput đáng khen ngợi

2

Để nâng cấp Lược đồ cài đặt, bạn phải viết 'Nâng cấpSchema.php',

ví dụ về Nâng cấpSchema.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();
}
}

Bước 2: Trong mô-đun của bạn, bạn sẽ tìm thấy mô-đun trong thư mục vv trong tệp đó thay đổi giá trị phiên bản setup_version (ví dụ: 1.0.1 thành 1.0.2) nên cao hơn giá trị phiên bản hiện tại.

Bước 3: Chạy php bin / magento setup: nâng cấp lệnh từ CLI

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.