User nach Kategorien abfragen

Hallo werte Yiis,

ich habe folgendes ERM:

830

Kategorien.png

D.H. eine MANY_MANY Relation zwischen Kategorien und Usern. Die Kategorien dürfen beliebig verschachtelt sein. Umgesetzt ist diese Selbstrelation der Kategorien per Nested Set. Die Verknüpfungstabelle zwischen User und Categories erlaubt nur das Ablegen von Usern in Blattknoten Kategorien.

Jetzt kommt das Problem: Ich möchte natürlich in der Lage sein, für eine beliebige Kategorie alle User abzugreifen. Das geht auch per manuellem SQL Query, z.B. so:

[SQL]

SELECT

"user"."username" AS "username", 


"user_user"."user_id" AS "uid",


"user_user"."category_id" AS "cid",


"user_cat"."name",


"user_cat"."parent_id",


"user_cat"."lft",


"user_cat"."rgt",


"parent_cat"."id",


"parent_cat"."lft",


"parent_cat"."rgt"

FROM

"User" AS "user"  

INNER JOIN

"UserCategories" "user_user" 


ON ("user"."id"="user_user"."user_id")

INNER JOIN

"Categories" AS "user_cat" 


ON ("user_user"."category_id"="user_cat"."id")

INNER JOIN

"Categories" AS "parent_cat" 


ON ("user_cat"."lft" BETWEEN "parent_cat"."lft" AND "parent_cat"."rgt")

WHERE

"parent_cat".id = 1

GROUP BY

"username", 


"uid", 


"cid",


"user_cat"."name",


"user_cat"."parent_id",


"user_cat"."lft",


"user_cat"."rgt",


"parent_cat"."id",


"parent_cat"."lft",


"parent_cat"."rgt"

[/SQL]

Ich möchte nun gerne einheitlich per $category->users alle user zur Kategorie bekommen. Deshalb würde ich gerne wissen, wie ich in der relations Methode festlegen kann, dass zum holen der User eine eigene Methode anstelle einer CActiveRelation verwendet wird? Könnt ihr mir weiterhelfen?

Vielen Dank,

Bergtroll

Bzw ist das hier die etwas kürzere Variante:

[SQL]

SELECT

node.id, 


node.name, 


user_id

FROM

"Categories" AS node

INNER JOIN

"Categories" AS children 

ON

children.lft BETWEEN node.lft AND node.rgt

INNER JOIN

"UserCategories" AS categories

ON

categories.category_id = children.id

WHERE

"node"."id"=:cid

GROUP BY

node.id, node.name, user_id

ORDER BY

node.id ASC

[/SQL]

Ich habs jetzt erstmal über MagicMethods gelöst, vielleicht fällt jemanden was besseres ein.

[PHP]

public function __get($property) {

if ('user'===$property) {


	return $this->getUsers();


} elseif ('userCount'===$property) {


	return $this->countUsers();


} else {


	return parent::__get($property);


}

}

[/PHP]