ich habe eine Tabelle Komponisten, die über HAS_MANY mit der Tabelle Noten verknüpft ist:
public function relations() {
return array(
'Werke'=>array(self::HAS_MANY, 'Noten', 'Komponist_Id'),
);
}
Ich möchte die search function im Model so ändern, dass in CGridView nur jene Zeilen angezeigt werden, bei denen tatsächlich verknüpfte Datensätze existieren.
public function search() {
$criteria=new CDbCriteria;
$criteria->with = array('Werke');
...
Wie kann ich überprüfen, ob es zu einem Komponisten Werke gibt?
Die Lösung ist folgende zusätzliche Zeile in der search() function:
$criteria->together = true;
Hier noch einmal die relevanten Codezeilen:
public function search() {
$criteria=new CDbCriteria;
...
$criteria->with = array('Werke');
$criteria->condition = ('Werke.Komponist_Id IS NOT NULL');
$criteria->together = true;
Nun brauche ich aber auch eine Abfrage, die mir im GridView nur jene Zeilen anzeigt, die mehr als einen verknüpften Datensatz enthalten. Leider schaffe ich das trotz stundenlangem Probieren und Recherchieren nicht.
public function search() {
$criteria=new CDbCriteria;
$criteria->with = array('Verlag','Werke');
$criteria->group = 't.Id';
$criteria->together = true;
$criteria->condition = 'count(Werke.Id) > 0';
Wie kann man die COUNT() Funktion in die Bedingung einbauen? Mein obiger Versuch funktioniert nicht.