我想增強現有的支付模塊(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被正確地更新:
步驟2-放在前面的辦公室這會突破的 「呼叫」 模型Quadra_Paybox_Model_Direct的捕獲()方法的順序:
證明過程進行「好」:我得到了「可以」,則die('ok');
返回,但沒有更新數據庫!它仍然顯示:再次
步驟3:導航到www.mydomain.com/testmodule ...和驚喜,一個新行是在這裏,但與ID跳躍(AUTO_INCREMENT):
因此,這是我需要你的幫助很大:
爲什麼ISN我的模型在步驟2保存數據嗎?
爲什麼會出現在ID字段意味着某種程度上的請求/插入已發送到一個數據庫中的跳躍?
我希望那些解釋清楚,並會給你足夠的數據來分享你的線索。
編輯:我直接通過核心還試圖/寫查詢,也可以通過調度,我100%的獨立的模塊中觀察到的事件。在兩種情況下都有同樣的結論:在自己的作品上調用該方法,但在工作流中調用該方法不會......在數據庫中仍然沒有保存和ID跳轉。
您是否在任何階段將數據加載到收件箱/保存的模型中?它看起來好像你的是,這將解釋這個問題(並取決於模型的工作方式 - 跳轉ID) – CCBlackburn 2012-01-12 22:02:41
不,我沒有在保存模型之前加載任何數據。通過這種方式(Magento方式),模型保存中的數據庫中會添加一個新條目。此外,我認爲如果數據加載是強制性的,我解釋的3個步驟中的任何一個都會將信息保存在數據庫中。實際上,在這3個步驟中的任何一個步驟中,數據都被加載到模型中謝謝你的想法! – 2012-01-12 22:13:43
你是對的,我誤解了數據正在被設置的位... 我可以建議的唯一的事情是打開mysql日誌記錄,看看INSERT是否被調用。 – CCBlackburn 2012-01-12 23:03:08