2012-01-12 61 views
0

我想增強現有的支付模塊(Paybox),它一直是小時我一直卡在這個突發情況:即使我成功可以從原始模型中將模型保存到數據庫中,我無法從另一個類/模型調用/保存模型。保存模型時從一個班級調用,但不是從另一個保存 - save()不工作

的原始模型:

class Quadra_Paybox_Model_Saved extends Mage_Core_Model_Abstract 
{ 
    public function saveCardInformation() { 

     $data['customer_id'] = 12; 
     $data['porteur'] = 'porteur'; 
     $data['dateval'] = 'dateval'; 
     $data['cvv'] = 'cvv'; 
     $data['numtrans'] = 'numtrans'; 
     $data['numappel'] = 'numappel'; 

     $this->setData($data); 
     $this->save(); 

     return $this;  
    } 
} 

當然,還有連接到它和工作資源模型:

class Quadra_Paybox_Model_Mysql4_Saved extends Mage_Core_Model_Mysql4_Abstract { 

    public function _construct() { 
     $this->_init('paybox/saved', 'id'); 
    } 
} 

的 「呼叫」 模式:

class Quadra_Paybox_Model_Direct extends Mage_Payment_Model_Method_Cc 
{ 
    public function saveCardInformationAlias() { 
     Mage::getModel('paybox/saved')->saveCardInformation();  
    } 

    public function capture(Varien_Object $payment, $amount) 
    {  
     $this->saveCardInformationAlias(); 
     die('ok'); 
    } 
} 

Pl請注意這個模型擴展了Mage_Payment_Model_Method_Cc。當我嘗試使它延長Mage_Core_Model_Abstract我得到這個錯誤,可能是我不能用一個線索/明白:

Error: Invalid method Quadra_Paybox_Model_Direct::prepareSave(Array ()) 

,我使用的測試文件:

我已經創建了一個CMS頁面(標識符= testmodule)嵌入一個phtml模板(template/testmodule.phtml)。我把這種導航到www.mydomain.com/testmodule 下面是這個模板的代碼:

<?php 
Mage::getModel('paybox/direct')->saveCardInformationAlias(); 
?> 

現在到了棘手的部分。 分步場景:

步驟1-導航到www.mydomain.com/testmodule。 Everyhting流動時,DB被正確地更新:

step1


步驟2-放在前面的辦公室這會突破的 「呼叫」 模型Quadra_Paybox_Model_Direct的捕獲()方法的順序:

證明過程進行「好」:我得到了「可以」,則die('ok');

返回,但沒有更新數據庫!它仍然顯示:再次

step2


步驟3:導航到www.mydomain.com/testmodule ...和驚喜,一個新行是在這裏,但與ID跳躍(AUTO_INCREMENT):

step3


因此,這是我需要你的幫助很大:

  • 爲什麼ISN我的模型在步驟2保存數據嗎?

  • 爲什麼會出現在ID字段意味着某種程度上的請求/插入已發送到一個數據庫中的跳躍?

我希望那些解釋清楚,並會給你足夠的數據來分享你的線索。


編輯:我直接通過核心還試圖/寫查詢,也可以通過調度,我100%的獨立的模塊中觀察到的事件。在兩種情況下都有同樣的結論:在自己的作品上調用該方法,但在工作流中調用該方法不會......在數據庫中仍然沒有保存和ID跳轉。

+0

您是否在任何階段將數據加載到收件箱/保存的模型中?它看起來好像你的是,這將解釋這個問題(並取決於模型的工作方式 - 跳轉ID) – CCBlackburn 2012-01-12 22:02:41

+0

不,我沒有在保存模型之前加載任何數據。通過這種方式(Magento方式),模型保存中的數據庫中會添加一個新條目。此外,我認爲如果數據加載是強制性的,我解釋的3個步驟中的任何一個都會將信息保存在數據庫中。實際上,在這3個步驟中的任何一個步驟中,數據都被加載到模型中謝謝你的想法! – 2012-01-12 22:13:43

+0

你是對的,我誤解了數據正在被設置的位... 我可以建議的唯一的事情是打開mysql日誌記錄,看看INSERT是否被調用。 – CCBlackburn 2012-01-12 23:03:08

回答

1

如果數據庫的自動增量遞增,但顯然沒有保存,那麼它必須是一箇中止交易。嘗試從您的代碼中刪除die()以查看它是否繼續前進,仍然可以使用Mage::log()進行輸出。

有整個銷售模塊,ack爲「核心/ resource_transaction」見慣有的幾個交易。現有的事件不會傳遞事實對象,而事實上這對事件真的很有幫助,所以可能沒有辦法將對象添加到其中之一。另外,模型在自己的保存期間使用事務,這意味着其他模型不能保存在其中,MySQL不支持嵌套事務。

你的最終解決可能要移動保存到進程的另一部分。或者,您可以利用Mage_Sales_Model_Order_Payment上的字段,因爲它接近您正在存儲的內容,並且可以正確保存爲訂單交易的一部分。

+0

就是這樣!當我問我的問題時,capture()方法正在調試,因此事務不成功導致mySQL中的@rollback。此回滾使ID auto_increment仍然遞增。然後,我調試了整個捕獲方法(),它像一個魅力一樣工作。我欠你一個自動收報機+ 1.我們走了。再次感謝。 – 2012-01-16 17:49:35

相關問題