使用Yii的CActiveDataProvider从多个表中进行选择

使用Yii的CActiveDataProvider从多个表中进行选择,yii,Yii,我有3个表格:主题、用户和详细信息——这些是定制论坛的一些表格 在其他常用字段中,Topics包含创建主题的用户的id FK。 用户包含nick/pass和id PK 除其他常用字段外,“详细信息”还包含用户的id FK 关系: 一个用户可以有一个详细信息。 一个用户可以有多个主题,但一个主题只能由一个用户创建 主题关系: return array( 'user' => array(self::BELONGS_TO, 'User', 'User_iduser'), ); return a

我有3个表格:主题、用户和详细信息——这些是定制论坛的一些表格

在其他常用字段中,Topics包含创建主题的用户的id FK。 用户包含nick/pass和id PK 除其他常用字段外,“详细信息”还包含用户的id FK

关系: 一个用户可以有一个详细信息。 一个用户可以有多个主题,但一个主题只能由一个用户创建

主题关系:

return array(
'user' => array(self::BELONGS_TO, 'User', 'User_iduser'),
);
return array(
    'details' => array(self::HAS_ONE, 'Details', 'User_iduser'),
);
用户关系:

return array(
'user' => array(self::BELONGS_TO, 'User', 'User_iduser'),
);
return array(
    'details' => array(self::HAS_ONE, 'Details', 'User_iduser'),
);
我试图得到一个包含主题和用户详细信息的列表,比如说主题名和用户名

目前我有:

$dataProvider=new CActiveDataProvider('Topic', array(
    'criteria'=>array(
    'with'=>array('user.details')
    )
));
但正如你所想象的,它不起作用,因为它没有从tbles用户或细节中选择任何内容

我的代码怎么了

+++++++++++++++

此代码从表用户和主题表中选择字段:

Topic::model()->with('user')->findAll();
但这一个不会从细节、用户和主题中选择:

Topic::model()->with('user.details')->findAll();
此外,我需要一个CActiveDataProvider解决方案,因为我需要它用于zii小部件,这意味着即使对主题::model->进行了某种修改。。。。代码get从3个表中进行选择,这并没有多大帮助

编辑:来自Yii的SQL日志

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
试试这个

$dataProvider=new CActiveDataProvider('Topic', array(
    'criteria'=>array(
    'with'=>array('user'=>array('alias'=>'user','with'=>array('details'=>array('alias'=>'details'))))
    )
));

试试这个

$dataProvider=new CActiveDataProvider('Topic', array(
    'criteria'=>array(
    'with'=>array('user'=>array('alias'=>'user','with'=>array('details'=>array('alias'=>'details'))))
    )
));

而不是排队

'with'=>array('user.details')
使用

'with'=>array('user')
然后加上

$criteria->compare( 'user.details', $query, true );
$criteria->together = true;
}
*其中,$query是一个变量,将在列详细信息中搜索,而不是在行中搜索

'with'=>array('user.details')
使用

'with'=>array('user')
然后加上

$criteria->compare( 'user.details', $query, true );
$criteria->together = true;
}

*其中,$query是一个变量,将在列详细信息中进行搜索

好吧,这样的代码除了我的代码之外不会做任何事情,而是添加$dataProvider->getData;然后var_dump$dataProvider将显示users表中的文件。所以我缺少详细信息表。奇怪的是,Yii并没有抱怨任何读取为“没有显示错误”的内容,只是没有显示我想要的内容。@alexandernst在应用程序配置中添加CWebLogRoute或CProfileLogRoute。它已经在那里了,你只需要取消注释,那有什么问题?它已经从details表和users表中进行了选择,如第一个SQLServer中所示。问题是我无法访问details表中的任何字段。我的意思是,如果我转到_view.php并编写一个var_dump$data,我会看到来自topics和users表的字段,但不会看到details表。也许从第三个表中访问变量是以不同的方式完成的?var_dump$data->user和var_dump$data->user->details在_view.php文件中的输出是什么?好吧,这样的代码除了我的代码外,不会做更多的事情,而是添加$dataProvider->getData;然后var_dump$dataProvider将显示users表中的文件。所以我缺少详细信息表。奇怪的是,Yii并没有抱怨任何读取为“没有显示错误”的内容,只是没有显示我想要的内容。@alexandernst在应用程序配置中添加CWebLogRoute或CProfileLogRoute。它已经在那里了,你只需要取消注释,那有什么问题?它已经从details表和users表中进行了选择,如第一个SQLServer中所示。问题是我无法访问details表中的任何字段。我的意思是,如果我转到_view.php并编写一个var_dump$data,我会看到来自topics和users表的字段,但不会看到details表。也许从第三个表中访问变量的方式不同?var_dump$data->user和var_dump$data->user->details在_view.php文件中的输出是什么?嗨,你是如何解决这个问题的。我也面临同样的问题。我,你是如何解决这个问题的。我也面临同样的问题