Nedochází k zápisu do databáze, pokud mu předchází download dat
- Janek007
- Člen | 8
Ahoj,
v presenteru, který má na starost export dat, chci provést dvě operace:
- vyexportovat data ( = výběr z databáze na základě specifikace z formuláře, download ve formě .txt)
- uložit aktivitu uživatele ( = uložení popisu operace do databáze)
Úsek PHP:
try
{
$this->samplesFacade->export($formData, $exportedIds);
$this->usersFacade->saveUserActivity($this->getUser()->id, "data export");
}
catch (Nette\Database\DriverException $ex)
{
$this->error($ex->getMessage(), 500);
}
Problém je, že k uložení aktivity nedojde. Když přehodím pořadí (nejdřív uložení aktivity a potom export), je vše v pořádku. Jenže export může teotericky selhat a potom nechci, aby došlo k uložení aktivity. Nevíte, kde je příčina?
Díky, Honza
- David Grudl
- Nette Core | 8218
Myslím, že křišťálovou kouli tu nikdo nemá, ale můžeš to probrat s https://chatgpt.com/
- Infanticide0
- Člen | 103
Moje koule mi řiká, že ta tvoje metoda export asi vrací data a ukončuje
request, proto ti to pak nezaloguje akci.
Jestli to tak je, tak je to blbost a předělej to.
- m.brecher
- Generous Backer | 863
@Janek007
Na tvůj dotaz v češtině copilot nepíše že nemá křišťálovou kouli, ale nabízí konkrétní řešení. Přehodit pořadí download x save a transakcí zajistit, aby buďto proběhly obě operace nebo žádná + dodá vzorek kódu:
try {
$this->database->beginTransaction();
// Uložení aktivity uživatele
$this->usersFacade->saveUserActivity($this->getUser()->id, "data export");
// Export dat
$this->samplesFacade->export($formData, $exportedIds);
$this->database->commit();
} catch (Nette\Database\DriverException $ex) {
$this->database->rollBack();
$this->error($ex->getMessage(), 500);
}
Mě takhle od boku přijde že to má logiku a já bych to tak řešil také. Copilot ale řešení včetně smysluplného vzorku kódu dodal za 10 vteřin. Doba se mění a dnes je lepší předhodit dotaz nejprve copilotu a až když selže tak zkusit fórum.