Cài đặt tập lệnh: Tạo bảng so với cập nhật bảng hiện có


22

Có một câu hỏi, gần đây tôi đang phát triển một mô-đun có rất nhiều bảng trong DB và khái niệm đã thay đổi thường xuyên, do đó cần phải thay đổi các bảng hiện có trong DB và tôi nhận thấy sự khác biệt trong việc tạo bảng và nâng cấp bảng. Bạn đi đây Nhìn vào việc tạo mã bảng dưới đây:

$table = $installer->getConnection()
    ->newTable($installer->getTable('module/table'))
    ->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, 9, array(
        'nullable' => false,
        'primary' => true,
        'identity' => true,
        'auto_increment' => true
    )
);

hàm newTable () trả về thể hiện của Varien_Db_Ddl_Table Và kịch bản bảng nâng cấp sử dụng các cách khác nhau để thêm cột mới vào bảng hiện có, hãy xem:

$installer->getConnection()
    ->addColumn($tableName, 'test', array(
        'nullable' => false,
        'length' => 9,
        'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
        'comment' => 'Test Field'
    )
)

hai hàm addColumn này khác nhau và chúng cũng là các phương thức của các lớp khác nhau và chúng làm tôi buồn mỗi khi tôi cần thay đổi cú pháp.
Vì vậy, đây là câu hỏi, có cách nào để cập nhật bảng hiện có bằng cách sử dụng thể hiện của lớp Varien_Db_Ddl_Table không?

Câu trả lời:


15

Dường như không có cách nào để sửa đổi bảng hiện có bằng cách sử dụng đối tượng Varien_Db_Ddl_Table. Nếu bạn đi vào mã cho lớp đó, bạn sẽ thấy không có khu vực nào nó kéo vào lược đồ hiện có cho bảng hoặc kiểm tra xem liệu bảng có tồn tại theo bất kỳ cách nào không. Điều đó sẽ được yêu cầu nếu bạn sử dụng nó để sửa đổi bảng.

Ngoài ra, trong Varien_Db_Ad CHƯƠNG_Interface, không có phương thức nào dọc theo dòng 'updateTable' lấy đối tượng Varien_Db_Ddl_Table làm tham số.

Đây chắc chắn là một trong những 'mùi mã' trong Magento, vì bạn có hai khối mã hoàn toàn khác nhau đang cố gắng thực hiện cùng một thứ theo những cách khác nhau. Sẽ chỉ dẫn đến lỗi.


Câu trả lời hay, tôi đã nghĩ rất nhiều, cảm ơn :)
Nick

2
Và bây giờ hãy thực hiện yêu cầu kéo Magento 2 để sửa nó :-)
Alex

6

Nếu nó nằm trong phạm vi của dự án, bạn có thể muốn xem xét thay đổi mô hình EAV nếu mô hình đó thay đổi rất thường xuyên như bạn đã đề cập. Điều này có thể giúp bạn tránh những rắc rối khi di chuyển dữ liệu nhầm lẫn qua lại. Đây là một bài viết giải thích những điều cơ bản của EAV trong Magento để bạn có thể đánh giá nó và quyết định xem nó có phù hợp với dự án của bạn không.

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.