2016-10-10 27 views
1

Ich bekomme unten Fehler in der Reihenfolge Erfolg Seite IF "nächste Bestellung Rechnungsnummer" wird nicht manuell von admin gesetzt.Prestashop erhöht nicht Rechnungsnummer

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 

Ich habe Klassen/Auftrag/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); 
} 

verengt Fehler nach unten dieses gemeinsame Problem? Wie behebt man das, ohne die Abfrage hart zu codieren? Prestashop Version 1.6.1.6

Antwort

0

Nach 3 Minuten Googeln fand ich eine Lösung für Sie.

  1. von hier MySQL Error 1093 - Can't specify target table for update in FROM clause

In MySQL können Sie die gleiche Tabelle nicht ändern, die Sie in der SELECT- Teil verwenden. Dieses Verhalten wird bei dokumentiert: http://dev.mysql.com/doc/refman/5.6/en/update.html

Sie müssen mit der verschachtelten Unterabfrage und führen Sie den Betrieb in zwei Teilen zu stoppen, oder alternativ eine einfache where-Klausel verwenden.

  1. von Prestashop Forum

https://github.com/PrestaShop/PrestaShop/commit/34ad2f5f45e8b02ce7c3174d94644d6114399746

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; 
Verwandte Themen