| 

.NET C# Java Javascript Exception

Cirteria Abfrage auf m:n mapping

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Cirteria Abfrage auf m:n mapping

davidk - 12.11.2010 15:24
Hallo zsuammen,

ich habe eine Frage ob und wenn ja, wie das möglich ist.

Also das habe ich gegeben:
User 1 -> 0..1 Profil
Profil 0..* -> 0..* Tag

In meiner View habe ich für jedes Tag, dass zu diesem Zeitpunkt existiert eine Checkbox, mit denen ich Profile die das Tag referenzieren finden will.

Set userList = User.createCriteria().list(max: params.max, offset: params.offset) {
                ...
		profile{
			if(!tagSelectedList.empty){
				tags{
					'in'("label",tagSelectedList)
				}
			}
		}
               ...
}

"tagSelectedList" sind die ausgwählten Tags. Jedes Profile, dass alle darin enthaltenen Tags zugeordnet hat, soll angezeigt werden.
Sobald die "tagSelectedList" > 1 ist, bekomme ich aber Ergebnisse in denen nur ein gewählter Tag enthalten ist.
Dabei spielt es keine Rolle ob ich ein
 and{ ...} 
Block darum mache.

Viele Grüße
David


Re: Cirteria Abfrage auf m:n mapping

koeberle - 15.11.2010 12:21
Genau das mach 'in' es gibt dir alles zurück wo mindestens ein Wert in der Liste ist die du vorgibst mit dem übereinstimmt was in der DB ist, du bräuchtest so etwas wie allIn (gibt es aber nicht). Ich bin mir gerade nicht ganz sicher ob das geht aber probiere mal das:
Language: CSS
Set userList = User.createCriteria().list(max: params.max, offset: params.offset) { ... profile{ and{ tagSelectedList.each{tag-> tags{ eq("label",tag) } } } } ... }


Christian


Re: Cirteria Abfrage auf m:n mapping

milkyman - 15.11.2010 12:27
Wenn du schreibst "tags in (a, b, c, d, e)" darfst du dich nicht wundern, dass alle Profile kommen, bei den ein Tag einen der Werte hat. Die Logik ist irgendwie genau verdreht.

Für das was du willst, musst du eine AND-Verknüpfung erstellen und die Operatoren des IN umtauschen. Du willst ja wissen, ob das selectedTag in den tags ist und nicht, ob dein Tag in den selectedTags ist.

So in der Art:
 ...
  profile {
       schleife über tagSelectedList
            'in'(tagSelectedListWert,tags)
  }
...

Ich bin mir aber nicht sicher, ob das 'in' auch mit Domain-Feld hinten und Parameter vorne funktioniert.

Mit HSQL könnte ich es dir besser hinschreiben. Das wird dann ein ggf. etwas längliches AND.

Bye,
Horst


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Cirteria Abfrage auf m:n mapping" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.