Bonjour à tous.
Je voudrai avoir quelques conseils SVP car je vais bientôt attaquer mon 1er site e-commerce (en PHP / MariaDB).
Quel est le meilleur moyen de générer les numéros de facture (pour qu’il n’y ai jamais de conflit dans la BDD) ?
J’avais dans un premier temps pensé mettre dans ma table des factures (order_invoices) une colonne int number. Et en PHP lors de la création d’une nouvelle facture faire comme ceci (exemple avec Eloquent de Laravel) :
$lastNumber = OrderInvoice::whereRaw(
'number = (
SELECT MAX(number) FROM order_invoices
)'
)
->first()
->number;
// et ensuite je fait un INSERT de la nouvelle facture en assigneant à "number" le résultat "$lastNumber + 1".
Mais après réflexion, je ne suis pas certain que ça soit la meilleure solution (j’utilise les transactions donc si fort trafic sur le site et que plusieurs membres valident une commande en même temps… risque de conflit dans l’incrémentation des numéros de facturation ?).
Un développeur que je connais, m’avais conseillé de par exemple créer une table compteurs. Et dans cette table :
Mettre comme colonne : id, number (c’est cette colonne qui sera incrémenté afin de savoir où on en est dans la numérotation), type (exemple : 'facture' pour incrémenter les numéros de facture, ou 'membres’ pour incrémenter les numéros de référence client, etc.)
Mettre une ligne pour "factures", et mettre un ligne pour "clients", etc.
Et dans mon programme (action de mon controller), pour la création d’une nouvelle facture :
De faire un lock row (sur la ligne de type type de la table compteurs) lors du début de la génération de la facture;
De récupérer number de la table compteurs, et cette valeur l’insérer (avec un +1) dans number de la table des factures (order_invoices);
Et de délocker la table compteurs;
Qu’en pensez-vous ? Et avez-vous d’autres idées et conseils SVP ?
Merci beaucoup.