การเพิ่มฟิลด์ที่กำหนดเองลงใน sales_flat_order


14

ฉันใช้ Google googling ลองผิดลองถูก แต่ฉันไม่สามารถหาวิธีแก้ปัญหาได้

  1. ความสามารถในการเปลี่ยนฟิลด์และคำสั่งของ sales_order_grid และ
  2. ความสามารถในการแสดงสองฟิลด์ที่กำหนดเองในตารางนี้ (กรองได้)

อดีต (จุดที่ 1) ได้รับการแก้ไขโดยการขยายMage_Adminhtml_Block_Widget_Gridในโมดูลที่กำหนดเองของฉัน (ฉันรู้เกี่ยวกับผู้สังเกตการณ์ แต่โมดูลที่ติดตั้งอื่น ๆ ก็เอาชนะการเปลี่ยนแปลงของฉันกับผู้สังเกตการณ์)

ไม่ว่าหลังเป็นปัญหาปัจจุบันของฉันด้านล่างนี้เป็นสองวิธีที่ทำให้ฉันไม่ผ่าน

วิธีที่ 1

<?php
/*  @var $this Mage_Sales_Model_Mysql4_Setup  */
$this->startSetup();
$connection = $this->getConnection();

/**
 * Create the payment method dropdown field, because this field _may_ be
 * used for searching we will create an index for it.
 */
$connection->addColumn(
    $this->getTable('sales/order_grid'),
    'x_payment_method',
    "ENUM('PayPal', 'SagePay') DEFAULT NULL"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');

/**
 * Create the order channel field to identify where the order was originally
 * generated from. Also add an index for this field for additional filtering.
 */
$connection->addColumn(
    $this->getTable('sales/order_grid'),
    'x_sale_channel',
    "ENUM('Amazon', 'Play', 'eBay', 'Website') NOT NULL DEFAULT 'Website'"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_sale_channel','x_sale_channel');

$this->endSetup();

วิธีที่ 2

ณ จุดนี้ฉันเหนื่อยกับการอ่านบทความ 7 ฉบับเดียวกันที่ไม่ได้ช่วยฉันจึงพยายามทำให้สาขาหนึ่งทำงานได้ ฉันยังตรวจสอบบันทึกข้อผิดพลาดใน Magento และพบว่า "$ this-> getTable ()" นั้นผิดพลาดดังนั้นฉันจึงลบออก

<?php
/*  @var $this Mage_Sales_Model_Mysql4_Setup  */
$this->startSetup();
$connection = $this->getConnection();

/**
 * Create the payment method dropdown field, because this field _may_ be
 * used for searching we will create an index for it.
 */
$this->addAttribute('sales_flat_order', 'x_test_option', array(
    'label' => 'X Test Option',
    'type' => 'varchar',
    'input' => 'select',
    'visible' => true,
    'required' => false,
    'position' => 1,
    'visible_on_front'  => false,
    'option' => array('value' => array('web', 'test 1', 'test 2')),
    'default' => array('web'),
));

$this->endSetup();

ข้อใดทำให้คำถามเกิดความแตกต่างระหว่างคอลัมน์กับแอตทริบิวต์ ข้อสันนิษฐานเบื้องต้นของฉันคือคอลัมน์จะถูกเพิ่มในตารางหลักที่มีอยู่ในขณะที่เพิ่มแอตทริบิวต์ลงในตาราง EAV_ * และเกี่ยวข้องอย่างเหมาะสม


แม้ว่าตารางนั้นจะเป็นแบบเรียบ แต่โมเดลทรัพยากรของมันคือ EAV ดังนั้นแอตทริบิวต์จะต้องลงทะเบียนในการกำหนดค่า EAV ที่จะเขียน หน่วยงานขายหลายแห่งเคยเป็น EAV แต่ถูกแบนด้วยเหตุผลด้านประสิทธิภาพ
benmarks

คำตอบ:


11

ข้อสันนิษฐานของคุณถูกต้อง
แต่สำหรับsales_ตารางพวกเขาเป็นหนึ่งเดียวกัน
เริ่มแรกหน่วยงานขายคือ EAV พวกเขาเปลี่ยนเป็นโต๊ะแบนเริ่มต้นด้วยรุ่น 1.4.0.1 (ฉันคิดว่า) และเพื่อความเข้ากันได้ย้อนหลังทั้งสองวิธีถูกเก็บไว้
สำหรับเอนทิตีแบน ๆ อื่น ๆ (เพจหน่วยเซนติเมตรบล็อกและโพล) ที่คุณไม่สามารถaddAttributeใช้ได้addColumnแต่สำหรับการขายมันใช้ได้ทั้งสองวิธี
หากคุณวางแผนที่จะสร้างส่วนขยายที่ต้องเข้ากันได้กับรุ่นก่อนหน้า 1.4 ให้ใช้addAttributeมิฉะนั้นฉันจะไม่เห็นจุดใด ๆ


ขอบคุณสำหรับข้อมูลที่ฉันพบว่ามีประโยชน์จริงๆ จริงๆแล้วตอนนี้คิดเกี่ยวกับมันฉันคิดว่าวิธีที่ถูกต้องคือการใช้addColumnวิธีการ? ในขณะที่ยังไม่ได้ใช้ 'getTable' เพราะ sales_flat_order เป็นเพียงแค่นั้น ผมจะพยายามที่ออกมาไม่นานและกลับมาพร้อมกับ virdict A :)
เถ้า

2
ปรากฎว่าฉันมีปัญหาสองอย่าง (อย่างหนึ่งที่ฉันมองข้าม); หนึ่ง$this->getTable('sales/flat_order')อาจถูกตั้งค่าเป็นsales_flat_order; ที่สองคือ$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');; ควรจะได้รับx_payment_type x_payment_method
เถ้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.