[Doctrine 1.2] Schauen, ob ein passender Record existiert?

jccTeq

Erfahrenes Mitglied
Hi Leute,

ich mal wieder... :) Kennt sich jemand mit dem OR-Mapper Doctrine aus? Ich hab da mal 'ne Frage:

wenn ich 'ne einfache DQL-Query baue mit 'nem ->where und diese über fetchArray() oder auch über execute() ausführen lasse, funktioniert das nur dann, wenn es in der zugehörigen Tabelle auch einen passenden Datensatz gibt. Existiert kein Datensatz, auf den die Where-clauses in der Query passen, so schmeißt Doctrine eine Exception mit der Meldung "Couldn't find class".

Der Fall, dass für eine Query kein passender Datensatz gefunden werden kann, ist aber doch keine Ausnahme. Im Gegenteil, das kommt doch sogar recht häufig vor, oder irre ich mich?

Also, wie frag ich mit Doctrine ab, ob mindestens ein passender Datensatz existiert und wie lasse ich dann ein leeres Array oder irgendwas anderes verwertbares zurückliefern, falls nicht?

Danke

Grüße,
Hendrik
 
Klar, is nix besonderes:

PHP:
	$dql = Doctrine_Query::create()
		->from('User usr')
		->leftJoin('usr.Roles r')
		->where('username = "'.$_POST["username"].'"')
		->andWhere('password = "'.$_POST["password"].'"');

	$user = $dql->fetchArray();

sieht aus wie'n simples Login-System, ist auch eines... Rein experimentell.

Ich hab da jetzt 'nen try/catch-Block drumherum gestrickt. Ist das der gangbarste Weg? Muss das so sein?

Danke
 
Zur Info: der Code-Abschnitt funktioniert, wenn ein zu username und password passender Datensatz in der Tabelle User enthalten ist.

Felix Jacobi hat gesagt.:
Hm, fehlt da nicht select()?
Macht keinen Unterschied. Select verwendet man in Doctrine anscheinend nur, wenn an statt des ganzen Records nur bestimmte Felder haben will.

yaslaw hat gesagt.:
Ich kenne zwar Doctrine nicht. Aber wie weiss das Ding, wie der leftJoin verbunden wird?
Anhand der in der schema.yml definierten Relations. Schau dir Doctrine mal an, bei Interesse. Scheint wirklich nicht schlecht zu sein, wenn man's erstmal kapiert hat.
 
Zuletzt bearbeitet:
Zurück