เพิ่มคอลัมน์ varchar ไปยังที่อยู่การสั่งซื้อ


13

ฉันพยายามเพิ่มเขตข้อมูล varchar สองสามรายการในตาราง sales / order_address แต่เกิดข้อผิดพลาดในการกำหนดคอลัมน์

ฉันมีรหัสต่อไปนี้:

$oInstaller->getConnection()
    ->addColumn(
        $oInstaller->getTable('sales/order_address'),
        'address_email',
        array(
            'nullable' => false,
            'length' => 255,
            'type' => Varien_Db_Ddl_Table::TYPE_VARCHAR,
            'comment' => 'Company Email Address'
        )
    );

สิ่งนี้จะส่งกลับข้อผิดพลาด: [message:protected] => Invalid column definition data

หากฉันเปลี่ยนรหัสเพื่อใช้Varien_Db_Ddl_Table::TYPE_INTEGERรหัสจะทำงานและคอลัมน์จะถูกเพิ่ม ฉันได้ลองลบความยาวและแอตทริบิวต์ที่เป็นโมฆะได้ แต่ไม่มีประโยชน์

แก้ไข

เมื่ออัปเดตสคริปต์จะได้รับการอัปเดตดังนี้มันจะทำงาน ไม่มีใครรู้ว่าสิ่งที่ทำให้เกิดข้อผิดพลาดนี้?

$oInstaller->getConnection()
    ->addColumn(
        $oInstaller->getTable('sales/order_address'),
        'address_email',
        Varien_Db_Ddl_Table::TYPE_VARCHAR . '(255)'
    );

คำตอบ:


52

TYPE_TEXTใช้ TYPE_VARCHARเลิกใช้แล้ว ( @see Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes)

และไม่ต้องกังวลกับพื้นที่เก็บข้อมูล หากคุณระบุประเภทTYPE_TEXTแต่ตั้งค่าlengthเป็นปล่อยว่า255Magento จะสร้างคอลัมน์VARCHARประเภทMySQL


2
ได้ผล! ->addColumn('name', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array( 'nullable' => true, 'length' => 255, ), null)
Martijn van Hoof

ฉันประหลาดใจที่มันเป็นแบบง่าย ๆ ... ชั้นเรียนบอกว่ามันจะแปลงประเภทที่เลิกใช้แล้วภายในเป็นไม่เลิกใช้ แต่ฉันคิดว่ามันเป็นค่าที่มีอยู่ก่อนหรือไม่ ไม่ว่าจะด้วยวิธีใดก็ตามบวกหนึ่ง
Robbie Averill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.