2010-11-29 4 views
0

Ich versuche zu überprüfen, dass eine Kombination von Einträgen in fünf Spalten (ich habe parent1, parent2, parent3, parent4 und parent5, die alle Integer sind) nicht bereits in meiner Formularüberprüfung vorhanden ist. Ich habe versucht:Komplexe Lehre Anfrageformular Validierung Hilfe!

$query = Doctrine_Query::create() 
->select('m.id', 'm.name') -> from ('Mix m') 

->where('m.parent1=?', $values['parent1']) 

->orWhere('m.parent1=?', $values['parent2']) 

->orWhere('m.parent1=?', $values['parent3']) 

->orWhere('m.parent1=?', $values['parent4']) 

->orWhere('m.parent1=?', $values['parent5']) 

->andWhere('m.parent2=?', $values['parent1']) 

->orWhere('m.parent2=?', $values['parent2']) 

... und so weiter. Wahrscheinlich nicht der effizienteste Weg, aber unabhängig davon wirft es einen Fehler, wenn einer der Werte mit irgendwelchen der bereits in der Datenbank vorhandenen Spalten übereinstimmt, es wird nicht nach der tatsächlichen Kombination gesucht ... Jede Hilfe wäre sehr willkommen!

Antwort

0

Wie wäre es ...

// Set of possible matches 
$set = array($values['parent1'], $values['parent2'], $values['parent3'], $values['parent4'], $values['parent5']); 

// Let's make it two-dimensional for simpler DQL syntax 
$sets = array($set, $set, $set, $set, $set); 

// Multiple WHERE IN AND 
$query = Doctrine_Query::create() 
->select('m.id', 'm.name') 
->from ('Mix m') 
->where('m.parent1 IN ? AND m.parent2 IN ? AND m.parent3 IN ? AND m.parent4 IN ? AND m.parent5 IN ?', $sets); 

Der WHERE IN AND sollte jeder Wert stellen Sie sicher, abgestimmt ist. Es gibt jedoch mindestens einen Fehlerfall, der in den Sinn kommt, wenn mehrere Werte in $ set identisch sind (zB '5, 5, 1, 4, 1'), liefert die Abfrage falsche Treffer. Vielleicht kann sich jemand anders verbessern Das könnte auch eine langsame Abfrage sein.

+0

Dank Tom - Ich schrieb eine andere Funktion zu validieren, dass die Antworten nicht wiederholt werden und es funktioniert gut. – Lauren