Aktualisiert
Ok, habe ich verpasst Wort „wenn“ in Ihrem Beitrag, und haben Sie Einträge benötigen nur, wenn Benutzer für ihn gestimmt. Lesen Sie das Update unten für den richtigen Code. Ich überlasse Ihnen den ersten Teil für den Fall, dass Sie ihn in Zukunft brauchen. INNER JOIN nimmt NUR Einträge, wenn diese Einträge mindestens 1 Stimme haben.
------------------ ERSTER TEIL (falsch) --------------------
Deklarieren Sie eine Beziehung in Ihrem Entries
Modell:
public function relations() {
return array(
'votes' => array(self::HAS_MANY, 'Votings', 'entry_id'),
);
}
Und wenn Sie Ihre Daten-Provider es tun, wie folgt erstellen:
$dataProvider = new CActiveDataProvider('Entries',
array(
'criteria' => array(
'with' => array(
'votes'=>array(
'joinType' => 'INNER JOIN'
)
)
)
)
);
Dies wird nicht erstellen Sie die SQL, die Sie oben geschrieben haben, aber dies wird es richtig machen. Die SQL werden wie folgt aussehen:
select * from tbl_entries t INNER JOIN tbl_votings v ON t.id = v.entry_id
----------------- zweiten Teil (rechts) ----------- -------
aktualisieren
Ok, wenn Sie also einfach Einträge und Stimmen brauchen, um für sie tun Sie das gleiche Verhältnis Erklärung ersten Teil:
public function relations() {
return array(
'votes' => array(self::HAS_MANY, 'Votings', 'entry_id'),
);
}
und erstellen Sie Ihre Datenprovider wie folgt aus:
$dataProvider = new CActiveDataProvider('Entries',
array(
'criteria' => array(
'with' => array('votes')
)
)
);
i Ihre Lösung verwendet. $ dataProvider = Einträge :: model() -> with ('votes') -> findAll(); in CListView einfügen, aber es gibt Fehler "Schwerwiegender Fehler: Aufruf einer Memberfunktion getData() auf einem Nicht-Objekt in ..." –