Cdbcriteria Mit Bedingung Aus Anderem Model

Ich hab zwei Tabellen, Preisvergleich und Shop.

Beide Tabellen haben ein Feld "Active", Preisverleich zu Shop ist per


'shop0' => array(self::BELONGS_TO, 'Shops', 'shop'),

verbunden (also in SQL als FK-Beziehung definiert).

Ich will nur die Ergebnis per Criteria, wo Preisvergleich.Active=1 und Shop.Active=1 ist. Beides muss zutreffen.

Meine jetzige Lösung verarbeitet nur das Active im Preisvergleich, da ich es nicht hinbekomme, in der Criteria das Feld aus "Shops" abzufragen:


        

$criteria = new CDbCriteria;

        $criteria->condition = 'game=:gameid AND active=:active';

        $criteria->params = array(':gameid' => $gameId, ':active' => 1);

        $criteria->order = 'price ASC';

        return Pricecompares::model()->findAll($criteria);

Ich vermute ich muss mit dem Ausdruck ->with() bei findall() arbeiten, bin mir aber nicht sicher. Ich habe schon versucht im Shop-Model einen Scope zu definieren, der nur die aktivierten Elemente selektiert. Den Scope konnte ich aber in der Criteria wieder nicht verarbeiten.

Danke im vorraus

Hi yupps,

ja du musst with benutzen. (ungetestet)




$criteria = new CDbCriteria;

$criteria->condition = 'game=:gameid AND shop.active = :active';

$criteria->params = array(':gameid' => $gameId, ':active' => 1);

$criteria->order = 'price ASC';

$criteria->with = array('shop0');

return Pricecompares::model()->findAll($criteria);



Das würde ich noch wie folgt erweitern, damit du immer deinen eigenen Alias hast


'shop0' => array(self::BELONGS_TO, 'Shops', 'shop', 'alias' => 'shop'),

Hallo,

deine Tipps haben leider nicht geholfen.

Ich habe zwei "Active" Felder die beachtet werden müssen, einmal priesvergleich.active = 1 und shops.active = 1. Wobei ich vom Preisvergleich-Model auf das Shops-Model mit der Spalte "Preisvergleich.Shop" (oder om model durch shop0) komme.

Anbei noch die Struktur der Tabellen:

Ich denke es muss irgendwie in diese Richtung gehen (siehe Änderungen an der Zeile mit "with()"):




..

 $criteria->with = array('shop0.active' => 1);

..



Das funktioniert leider nicht, selbst wenn ich bewusst was falsche in "with()" angebe wie z.B:




..

 $criteria->with = array('shop0.id' => 45878);

..



klappt die Abfrage. (Ein Shop mit der ID 45878 gibt es nicht). Das wird garnicht beachtet