CDBCriteria Suche in Relation der Relation

Hallo Zusammen,

ich komme hier bei einem Problem nicht weiter und hoffe das hier jemand Licht in die Sache bringen kann.

Ich möchte in meiner Search Methode nur die Inhalte von Affiliates durchsuchen die einem bestimmten Händler zugeordnet sind.

Die Struktur sieht folgendermaßen aus :

Inhalte kommen aus "AdSpace". AdSpace hat eine Relation zu "User" über das Feld user_id.

Affiliates und Händler stehen in "User".

Die Beziehung zwischen Händler und Affiliate wird über "MerchantHasAffiliate" mit den Feldern affiliate_id und merchant_id zugeordnet.

Dies ist mein Ansatz (ich weiss nicht wie/ob ich die Beziehung definieren kann/muss um auf MerchantHasAffiliate zugreifen zu können) :

primaryKey() im AdSpace Model :

geändert von : return ‘id’ auf


return array('id', 'user_id');



relations() im AdSpace Model :


'user' => array(self::BELONGS_TO, 'User', 'user_id'),

'MerchantHasAffiliate' => array(self::MANY_MANY, 'MerchantHasAffiliate', 'merchant_has_affiliate(affiliate_id, merchant_id)'),

search() im AdSpace Model :


$criteria->with = array('group'=>'t.user_id','condition' => 'merchantHasAffiliate.affiliate_id = t.user_id AND merchantHasAffiliate.merchant_id = '.$mid);

Wie filtere ich nun am besten an die Daten ?

Mit CSqlDataProvider bekomme ich nun schon mal passende Ergebnisse allerdings fehlen mir die in den Relationen zugeordneten AR´s muss ich die meinem View extra bereitstellen oder kann ich die irgendwie direkt in den CSqlDataProvider einhängen?

Du kannst den ‘joinType’ in with() auf ‘INNER JOIN’ setzen. Aber dazu müsste ich deinen Code besser lesen können, was mir grad zu mühselig ist :)

Kannst du deine Code evtl mit code tags umschließen? Dazu einfach auf Beitrag bearbeiten klicken, deinen Code markieren und dann den < > Knopf oben im Editor drücken.

Klar dachte das hätte ich gleich gemacht :rolleyes: . Das mit Inner Join guck ich mir gleich mal an, in der Hoffnung das das zusammen mit CDBCriteria klappt und meld mich dann nochmal hier.

Jepp das wars,

mittels "through" in der Relationsdefinition und Inner Join löpt dat.

Danke!