繁体   English   中英

Prestashop不会增加发票号码

[英]Prestashop is not increasing invoice number

我在订单成功页面中得到以下错误如果“下一个订单发票编号”不是从管理员手动设置的。

Fatal error: Uncaught You can't specify target table 'ps_order_invoice' for update in FROM clause<br /><br /><pre>UPDATE `ps_order_invoice` SET number =(SELECT new_number FROM (SELECT (MAX(`number`) + 1) AS new_number FROM `ps_order_invoice`) AS result) WHERE `id_order_invoice` = 54</pre> thrown in /classes/db/Db.php on line 791

我把错误缩小到了class / order / Order.php

if ($number) {
    Configuration::updateValue('PS_INVOICE_START_NUMBER', false, false, null, $id_shop);
}

$sql = 'UPDATE `'._DB_PREFIX_.'order_invoice` SET number =';

if ($number) {
    $sql .= (int)$number;
} else {
    $sql .= '(SELECT new_number FROM (SELECT (MAX(`number`) + 1) AS new_number
    FROM `'._DB_PREFIX_.'order_invoice`'.(Configuration::get('PS_INVOICE_RESET') ?
        ' WHERE DATE_FORMAT(`date_add`, "%Y") = '.(int)date('Y') : '').') AS result)';
}

$sql .= ' WHERE `id_order_invoice` = '.(int)$order_invoice_id;

return Db::getInstance()->execute($sql);
}

这是常见问题吗? 如何解决这个问题而不对查询进行硬编码? Prestashop版本1.6.1.6

谷歌搜索3分钟后,我找到了解决方案。

  1. 从这里MySQL错误1093 - 无法在FROM子句中指定更新的目标表

在MySQL中,您无法修改在SELECT部分​​中使用的同一个表。 此行为记录在: http//dev.mysql.com/doc/refman/5.6/en/update.html

您将需要停止使用嵌套子查询并分两部分执行操作,或者使用简单的where子句。

  1. 来自Prestashop论坛

https://github.com/PrestaShop/PrestaShop/commit/34ad2f5f45e8b02ce7c​​3174d94644d6114399746

if ($number) {
            Configuration::updateValue('PS_INVOICE_START_NUMBER', false, false, null, $id_shop);
        }
        $sql = 'UPDATE `'._DB_PREFIX_.'order_invoice` SET number =';
        if ($number) {
            $sql .= (int)$number;
        } else {
            $getNumberSql = '(SELECT new_number FROM (SELECT (MAX(`number`) + 1) AS new_number
            FROM `'._DB_PREFIX_.'order_invoice`'.(Configuration::get('PS_INVOICE_RESET') ?
                ' WHERE DATE_FORMAT(`date_add`, "%Y") = '.(int)date('Y') : '').') AS result)';
            $getNumberSqlRow = Db::getInstance()->getRow($getNumberSql);
            $newInvoiceNumber = $getNumberSqlRow['new_number'];
            $sql .= $newInvoiceNumber;
        }
        $sql .= ' WHERE `id_order_invoice` = '.(int)$order_invoice_id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM