如果有人能帮我解决这个问题,我会非常感激。我在Magento,顺便说一下,我有这个方法,它基本上是获取两组数据,并用它们创建一条sql语句。
private function _getInsertSql($data, $itemData)
{
$sql = 'insert into orders_headers (';
$keys = array_keys($data);
$sql .= implode(', ', $keys);
$sql .= ') values (';
foreach($data as $value) {
$type = $value['type'];
$vv = $value['value'];
if ($type == 'number') {
$sql .= $vv;
} else {
$sql .= $this->_db->quote($vv);
}
$sql .= ',';
}
$sql = substr($sql, 0, strlen($sql)-1);
$sql .= ');';
$first = 0;
$sql .= 'insert into orders_lines (';
foreach($itemData as $data) {
if ($first <= 0) {
$keys = array_keys($data);
$sql .= implode(', ', $keys);
$sql .= ') values (';
} else {
$sql .= '(';
}
foreach($data as $value) {
$type = $value['type'];
$vv = $value['value'];
if ($type == 'number') {
$sql .= $vv;
} else {
$sql .= $this->_db->quote($vv);
}
$sql .= ',';
}
$sql = substr($sql, 0, strlen($sql)-1);
$sql .= '),';
$first++;
}
$sql = substr($sql, 0, strlen($sql)-1);
$sql .= ';';
Mage::log("START" .$sql . "END", NULL, 'sql.log');
return $sql;
}正如您在最后看到的,我注销了.sql,奇怪的是,它产生了两次相同的查询。因此,在DB中插入同一行两次。
我无论如何也看不出它在哪里循环到顶部并再次创建查询。
输出sql为:
2013-06-11T15:37:45+00:00调试(7):STARTinsert进入orders_headers (orderID,datetime,ip,customerID,forename,surname,address1,address2,城镇,县,国家,邮政编码,电话,传真,电子邮件,公司,deliveryName,deliveryAddress1,deliveryAddress2,deliveryTown,deliveryCounty,deliveryCountry,deliveryPostcode,deliveryTelephone,goodsTotal,shippingTotal,taxTotal,discountTotal,order_state,status,,)e_purchaseordref,e_statuschk,e_accepted)值('100004952','20130611153744','127.0.0.1',0,'TES','S','','GB','S','SA','','S@gmila.com','','TES S','GB','S',‘'SA',28.88,7.25,4.81,0,'new','pending_awaiting_payment','','20130611153745','P','udropship_default',5,'Cheque','',0,'','Cheque','udropship_default','master/site/',0,'','100004952','master/site/','ZZZ888','','2106','');插入xm1_orders_lines (orderID,productID,code,名称,数量,重量,价格,nameNative,税额,ooprice,ooprice,supplierID,supplierCost,supplierCostCurrencyID,order_state,order_status,order_save_time)值(‘100004952’,'UGWA050',‘不锈钢
酒冰桶,最大9磅,1,10.0900,16.82,不锈钢
酒冰桶,magnum 9 pt',3.36,0,0,5,10.0900,1,‘新建’,‘等待付款’,'20130611153745');END 2013-06-11T15:37:45+00:00调试(7):STARTinsert进入orders_headers (orderID,datetime,ip,customerID,forename,surname,address1,address2,镇,县,国家,邮政编码,电话,传真,电子邮件,公司,deliveryName,deliveryAddress1,deliveryAddress2,deliveryTown,deliveryCounty,deliveryCountry,deliveryPostcode,deliveryTelephone,goodsTotal,shippingTotal,taxTotal,discountTotal,order_state,status,,)e_purchaseordref,e_statuschk,e_accepted)值('100004952','20130611153744','127.0.0.1',0,'TES','S','','GB','S','SA','','S@gmila.com','','TES S','GB','S',‘'SA',28.88,7.25,4.81,0,'new','pending_awaiting_payment','','20130611153745','P','udropship_default',5,'Cheque','',0,'','Cheque','udropship_default','master/site/',0,'','100004952','/master/site/','ZZZ888','','2106','');插入xm1_orders_lines (orderID,productID,code,名称,数量,重量,价格,nameNative,税额,ooprice,ooprice,supplierID,supplierCost,supplierCostCurrencyID,order_state,order_status,order_save_time)值(‘100004952’,'UGWA050',‘不锈钢
酒冰桶,最大9磅,1,10.0900,16.82,不锈钢
酒冰桶,magnum 9 pt',3.36,0,0,5,10.0900,1,‘新建’,‘等待付款’,‘20130611153745’);结束
有人能提供帮助吗?
谢谢
发布于 2013-06-12 00:08:59
我认为foreach没有给你两次查询,但是你的方法被调用了两次。代码中的log方法在foreach循环之外,日志文件本身包含两个条目(包装在START和END中)。最好找出调用该方法的位置,并在那里进行调试。
发布于 2013-06-12 16:16:30
在深入研究之后,我发现afterordersaved之后的事件被调用了两次。
我相信它是通过customer_save_observer_executed来解决这个问题的,我刚刚做了以下几件事:
if(Mage::register('customer_save_observer_executed')) {
return;
}
Mage::log('afterOrderSavedObserver call', NULL, 'method_calls.log');
$model = Mage::getModel('ordersintegration/export');
$model->afterOrderSavedXm1($order);
Mage::register('customer_save_observer_executed', true);这现在起作用了
https://stackoverflow.com/questions/17048412
复制相似问题