Auswahl aus mehreren Tabellen mit Yii ' s CActiveDataProvider
Ich habe 3 Tabellen: Topics
, Users
und Details
(diese sind einige der Tabellen einer benutzerdefinierten forum)
Topics
enthält (neben anderen üblichen Feldern) id (FK) des Benutzers, der Sie erstellt das Thema.
Users
enthält nick/pass und die id (PK)
Details
enthält (neben anderen üblichen Feldern) id (FK) des Benutzers.
Beziehungen:
Ein Benutzer kann über 1 detail.
Ein Benutzer kann mehrere Themen, aber ein Thema kann nur erstellt werden, durch einen Benutzer.
Thema Beziehungen:
return array(
'user' => array(self::BELONGS_TO, 'User', 'User_iduser'),
);
User relations:
return array(
'details' => array(self::HAS_ONE, 'Details', 'User_iduser'),
);
Ich versuche zu bekommen eine Liste mit Themen und Benutzer-Informationen (zum Beispiel, sagen wir das Thema Namen und den Namen des Benutzers).
Derzeit habe ich dieses:
$dataProvider=new CActiveDataProvider('Topic', array(
'criteria'=>array(
'with'=>array('user.details')
)
));
Aber wie Sie sich vorstellen können, es funktioniert nicht (gelesen in der es keine Auswahl, nichts von den tbles Benutzer oder Details).
Was ist falsch an meinem code?
+++++++++++++++
Dieser code wählt Felder aus der Tabelle Benutzer (und die Thema-Tabelle):
Topic::model()->with('user')->findAll();
Aber diese nicht auswählen von details, Benutzer und Thema:
Topic::model()->with('user.details')->findAll();
Ausserdem brauche ich einen CActiveDataProvider
Lösung, wie ich brauche es für zii-widgets (bedeutet, dass, selbst wenn irgendeine Art von Veränderung auf die Topic::model()->with()....
code zu bekommen ist, wählen Sie aus den 3 Tabellen ist es nicht wirklich hilfreich)
EDIT: (SQL log von Yii)
Querying SQL: SELECT COUNT(DISTINCT `t`.`idtema`) FROM `tema` `t` LEFT
OUTER JOIN `usuario` `usuarioIdusuario` ON
(`t`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`) LEFT OUTER JOIN
`detallesusuario` `detallesusuario` ON
(`detallesusuario`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`)
Querying SQL: SELECT `t`.`idtema` AS `t0_c0`, `t`.`Usuario_idusuario` AS
`t0_c1`, `t`.`Categoria_idcategoria` AS `t0_c2`, `t`.`tema` AS `t0_c3`,
`t`.`fecha_hora` AS `t0_c4`, `usuarioIdusuario`.`idusuario` AS `t1_c0`,
`usuarioIdusuario`.`nick` AS `t1_c1`, `usuarioIdusuario`.`contrasena` AS
`t1_c2`, `usuarioIdusuario`.`email` AS `t1_c3`,
`detallesusuario`.`Usuario_idusuario` AS `t2_c0`,
`detallesusuario`.`nombre` AS `t2_c1`, `detallesusuario`.`apellidos` AS
`t2_c2`, `detallesusuario`.`cumpleanos` AS `t2_c3`,
`detallesusuario`.`telefono1` AS `t2_c4`, `detallesusuario`.`telefono2` AS
`t2_c5` FROM `tema` `t` LEFT OUTER JOIN `usuario` `usuarioIdusuario` ON
(`t`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`) LEFT OUTER JOIN
`detallesusuario` `detallesusuario` ON
(`detallesusuario`.`Usuario_idusuario`=`usuarioIdusuario`.`idusuario`)
LIMIT 10
- HI, Wie hast du dieses problem gelöst. Ich stehe vor demselben Problem
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese
Und
$dataProvider->getData();
und dannvar_dump($dataProvider)
wird mir zeigen fileds aus der Benutzer-Tabelle. Ich bin also fehlt die Tabelle mit den details. Seltsame Sache über dieses ist, dass Yii beklagt sich nicht über alles zu Lesen (als nicht-Fehler-angezeigt-und-überall), aber es funktioniert einfach nicht zeigen, was ich will.CWebLogRoute
oderCProfileLogRoute
in Ihrer Anwendung config. Seine bereits da, Sie müssen nur die Kommentarzeichen davor entfernen esdetails
undusers
Tabellen wie in der ersten sqlvar_dump($data->user)
undvar_dump($data->user->details)
im _view.php Datei?anstatt der Zeile
verwenden
dann fügen Sie
*Wo $Abfrage ist eine variable, die gesucht wird in der Spalte details