Polemika nad ActiveRow::update

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Lister
Člen | 12
+
0
-

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
+
0
-

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.

Lister
Člen | 12
+
0
-

Tak ale kdyz je tam vylozene napsana konverze na bool, tak predpoklad je, ze to byl umysl aby to vracelo jen uspech / neuspech, proto mi to prijde jako chyba. Kdyby to vracelo count, jako pdo, je to v poradku.