Невозможно установить пользовательский атрибут для таблицы sales_flat_order - PullRequest
2 голосов
/ 26 марта 2012

Я использую Magento ver. 1.6.2.0.

После прочтения ряда постов и вопросов (в SO и других местах) я попытался добавить атрибут в свою таблицу sales_flat_order. В предыдущих версиях Magento модель продаж / заказов использовала метод EAV, но, насколько я могу судить, после 1.4 она была перенесена на плоский стол.

Итак, вот мой файл установки mysql:

$installer = $this;
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'khaos_soc', 'varchar(255) NULL');

Который добавил столбец в мою таблицу sales_flat_order.

Моя проблема в том, что я не могу установить данные для вставки в это поле. У меня есть наблюдатель, который вызывается событием 'checkout_submit_all_after'. Код извлекает идентификатор текущего заказа, а затем пытается установить данные 'khaos_soc', вот код:

$test = Mage::getModel('sales/order')->load($order->getId());
// write the khaos soc to the database
$test->setKhaosSoc('just testing');
$test->setCustomerFirstname('Charlie');
$test->save();

Метод setCustomerFirstname () работает и меняет имя на Чарли, но метод setKhaosSoc () ничего не сохраняет в базе данных. Я также пытался использовать setData («khaos_soc», «просто тестирование») для выполнения действий, которые тоже не работают.

Я проверил это, вручную установив значение для 'khaos_soc' в базе данных, затем вызвал соответствующий порядок и повторил результат getKhaosSoc (), и это сработало, но я все еще не могу его установить.

Итак, я могу получить созданные вручную записи для своего пользовательского атрибута, но не могу их установить. Кто-нибудь может подсказать, почему это так?

С уважением,

Джеймс


Я попробовал подход, предложенный Зявой, но он все равно не спасает. Вот мой код обновления:

$installer = $this;
$installer->startSetup();
$installer->addAttribute(
    'order', 
    'khaos_soc', 
    array(
        'type' => 'varchar', /* varchar, text, decimal, datetime */
        'grid' => false /* or true if you wan't use this attribute on orders grid page */
    )
);
$installer->endSetup();

Вот мой config.xml:

<?xml version="1.0"?>
<!-- 
/**
 * @category   Symphony
 * @package    Symphony_Khaosorders
 * @author     ModuleCreator
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 -->
<config>
    <modules>
        <Symphony_Khaosorders>
            <version>0.1.8</version>
        </Symphony_Khaosorders>
    </modules>
    <frontend>
        <routers>
            <khaosorders>
                <use>standard</use>
                <args>
                    <module>Symphony_Khaosorders</module>
                    <frontName>khaosorders</frontName>
                </args>
            </khaosorders>
        </routers>
        <layout>
            <updates>
                <khaosorders>
                    <file>khaosorders.xml</file>
                </khaosorders>
            </updates>
        </layout>
    </frontend>
    <admin>
        <routers>
            <khaosorders>
                <use>admin</use>
                <args>
                    <module>Symphony_Khaosorders</module>
                    <frontName>khaosorders</frontName>
                </args>
            </khaosorders>
        </routers>
    </admin>
    <adminhtml>
        <menu>
            <khaosorders module="khaosorders">
                <title>Khaosorders</title>
                <sort_order>71</sort_order>               
                <children>
                    <items module="khaosorders">
                        <title>Manage Items</title>
                        <sort_order>0</sort_order>
                        <action>khaosorders/adminhtml_khaosorders</action>
                    </items>
                </children>
            </khaosorders>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <Symphony_Khaosorders>
                            <title>Khaosorders Module</title>
                            <sort_order>10</sort_order>
                        </Symphony_Khaosorders>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <khaosorders>
                    <file>khaosorders.xml</file>
                </khaosorders>
            </updates>
        </layout>
    </adminhtml>   
    <global>
        <models>
            <khaosorders>
                <class>Symphony_Khaosorders_Model</class>
                <resourceModel>khaosorders_mysql4</resourceModel>
            </khaosorders>
            <khaosorders_mysql4>
                <class>Symphony_Khaosorders_Model_Mysql4</class>
                <entities>
                    <khaosorders>
                        <table>khaosorders</table>
                    </khaosorders>
                </entities>
            </khaosorders_mysql4>
        </models>
        <resources>
            <khaosorders_setup>
                <setup>
                    <module>Symphony_Khaosorders</module>
                    <class>Mage_Sales_Model_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </khaosorders_setup>
            <khaosorders_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </khaosorders_write>
            <khaosorders_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </khaosorders_read>
        </resources>
        <blocks>
            <khaosorders>
                <class>Symphony_Khaosorders_Block</class>
            </khaosorders>
        </blocks>
        <helpers>
            <khaosorders>
                <class>Symphony_Khaosorders_Helper</class>
            </khaosorders>
        </helpers>
    </global>
</config>

А вот мой метод наблюдателя:

$test = Mage::getModel('sales/order')->load($order->getId());
// write the khaos soc to the database
$test->setKhaosSoc('just testing');
$test->setCustomerFirstname('Charlie');
$test->save();

Что-то мне не хватает?

Ответы [ 3 ]

3 голосов
/ 27 марта 2012

Это, вероятно, ваш кеш. Даже если у вас отключено кэширование или вы очистили кеш через администратора, я считаю, что кеширование БД все еще происходит. Попробуйте rm -rf var/cache/* и посмотрите, поможет ли это.

3 голосов
/ 13 августа 2012

Вы должны использовать метод Mage_Sales_Model_Resource_Setup::addAttribute(), потому что он заботится об изменении плоских таблиц.И вы не должны делать это вручную, звоня addColumn

1 голос
/ 26 марта 2012

Вы должны сделать это по-другому:

  1. Проверьте в config.xml, что тип вашей установочной модели Mage_Eav_Model_Entity_Setup:

<global>
     <resources>
         <your_module_setup>
              <setup>
                  <module>Your_Module</module>
                  <class>Mage_Sales_Model_Mysql4_Setup</class>
              </setup>
         </your_module_setup>
     </resources>
 </global>
В вашем скрипте обновления модуля:
$installer = $this;
$installer->startSetup();
$installer->addAttribute(
    'quote_item', 
    'your_attribute_code', 
    array(
        'type' => 'int', /* varchar, text, decimal, datetime */,
    )
);
$installer->endSetup();

Все кредиты Magento - добавление нового столбца в sales_flat_quote_item и sales_flat_order_item `введите код здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...