Limiter proprement des requetes en masse avec l'objet $db

Hello,

Je souhaite générer des factures depuis un hook et je me retrouve bloquer par la limite de mémoire de PHP. Ne souhaitant pas me déshonorer en augmentant la limite d’utilisation mémoire directiement dans mon php.ini, je voudrais optimiser / paginer mon script.

J’arrive à récupérer les factures depuis mon application externe sans trop de souci.

Je boucle sur le tableau ainsi récupéré où chaque élément correspond à un array() contenant les informations de ma facture. A chaque itération de ma boucle principale, je souhaiterais faire un commit en BDD du nouvel objet facture créé. Quelque chose comme :

$factures = array(...); // Mon tableau avec toutes mes factures récupérées

foreach ($factures as $facture) { // Boucle principale
   $invoice = new Facture($db) // Création de mon objet facture

	[...] // Les différents attributs de mon objet $invoice (Facture)

	foreach ($facture['lines'] as $line) {
		$line = new FactureLigne($db);

		[...] // Les différents attribut de mon objet $line (FactureLigne) 
	}

	$id = $invoice->create($user); // Création de ma facture (avant le paiement)

	foreach ($facture['payments'] as $payment) {
		$payment = new Paiement($db);

		$payment->amount = $payment['amount'];
		$payment->amounts = array();
		$payment->amounts[$id] = $payment->amount; // Le lien facture <-> paiement

		[...] // Les différents attribut de mon objet $payment (Paiement) 
	}


	if ($id < 0) {
		$error++;
		dol_print_error($db, $invoice->error);
	} else {
		$invoice->validate($user);
		dol_syslog("Invoice created with id=" . $id . "\n", LOG_INFO);
		$db->commit(); // ---> ICI <----
	}
}

Lorsque que j’execute mon code et que je regarde la taile de $db->queries à la 33ème ligne de mon script (au commentaire « ----> ICI <---- »), il semble s’incrémenter à chaque itération de ma boucle principale sans se vider.

Comment optimiser mon script pour qu’il décharge la mémoire (au moins en partie)?

Merci pour votre aide.

Lucien

UP,

Des idées ???

Comment paginer mes requetes ou libérer de la mémoire.

Toujours personne sur cette problématique ???