0

我使用magento 1.7。
我正在尝试使用 magento 制作广告模块。
用户可以将广告作为产品发布,当他支付订单时,我想启用广告(产品)。为此,我听了 sales_order_invoice_save_after。一切正常,但是当我尝试将产品保存在事件侦听器中时,保存函数会引发异常:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

我的功能如下所示:

public function onInvoiceSaveAfter(Varien_Event_Observer $observer)
{
    $event = $observer->getEvent();
    $invoice = $event->getInvoice();
    switch($invoice->getState())
    {
       case Mage_Sales_Model_Order_Invoice::STATE_PAID :
       {

          $order = $invoice->getOrder();
          $items = $order->getAllItems();

          //Update the product
          $product = Mage::getModel('catalog/product')->load($item->getEntityId());
          $product->setAdEndDate('2015-10-10 00:00:00');
          $product->getResource()->saveAttribute($product, 'ad_end_date'); //Throws exception
        }
}

任何人都可以帮助我吗?
我怎样才能做到这一点?

4

1 回答 1

0

我相信这是因为您实际上没有正在使用的项目(您从不使用 foreach() 循环)。尝试这个:

public function onInvoiceSaveAfter(Varien_Event_Observer $observer)
{
    $event = $observer->getEvent();
    $invoice = $event->getInvoice();
    switch ($invoice->getState()) {
        case Mage_Sales_Model_Order_Invoice::STATE_PAID :
        {

            $order = $invoice->getOrder();
            $items = $order->getAllItems();

            foreach ($items as $item) {
                //Update the product
                $product = Mage::getModel('catalog/product')->load($item->getProductId());
                $product->setAdEndDate('2015-10-10 00:00:00');
                $product->getResource()->saveAttribute($product, 'ad_end_date'); //Throws exception
            }

        }
    }
}

如果这不起作用,请尝试直接保存产品,而不是只更新一个属性:

$product->save()
于 2013-01-18T12:33:41.200 回答