Polemika nad ActiveRow::update
- Lister
- Člen | 12
Resil jsem odchyceni PDOException v Modelu kvuli delegovani overeni duplicity na databazi.
Skoncil jsem na necem podobnem (ma to mouchy, vim, mozna to neni rozumny pristup, ale to neni predmetem diskuze):
try {
return $row->update($values);
} catch(\PDOException $e) {
return FALSE;
}
Dospel jsem k celkem logickemu vysledku a to je ten, ze kdyz updatuju identicke data do db, mysql na to prijde a vrati 0 aktualizovanych radku (coz je logicke). Projde to pres ArrayHash, resp Row a skonci v ResultSetu a nakonec v Selectionu a testuje se to v ActiveRow::update nasledovne:
if ($selection->update($data)) {
return TRUE;
} else {
return FALSE;
}
No a vysledek je ten, ze to vraci FALSE (protoze count ResultSetu je 0), ikdyz vlastne update probehl v poradku, ikdyz beze zmeny.
Muj nazor je, ze by to melo vracet bud int a tedy 0 pro update beze zmeny a pripadne vyssi cislo pro pocet aktualizovanych radku (podobne jako PDO). Rozhodne ne FALSE pri uspesnem updatu.
Mam to nahlasit, pripadne napsat opravu nebo jsem neco prehledl?
- sKopheK
- Člen | 207
Je to matoucí, ale když si člověk zvykne, tak to přestane řešit… jako hodně věcí u různých frameworků. Všechny operace s DB je dobré mít v try – catch bloku a u update počítat s tím, že se provede vždy správně (ať už se něco změní, nebo ne) a při případné chybě zachytit výjimku.