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
            }

        }
    }
}

それでもうまくいかない場合は、1 つの属性を更新するだけでなく、商品を直接保存してみてください。

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