Yii框架:使用两个表中的详细信息创建CActiveDataProvider

时间:2012-01-17 06:34:50

标签: php yii

我在 问题表 硬件详细信息表 之间存在以下数据库关系。 问题 HardwareDetail 有很多关系。和 tbl_quesionhardwaredetial 表包含另一个名为 answer 的新属性

我想创建活动数据提供程序(CActiveDataProvider),其中包含给定硬件详细信息的问题列表和相关答案。

我已根据以下标准提取给定硬件详细信息的相关问题。

$quesionsDataProvider=new CActiveDataProvider('Question', array(
            'criteria'=>array(
                'with'=>array('hardwaredetails'=>array( 
                        'on'=>'hardwaredetail_Id=' .$modelHD->Id, 
                        'together'=>true,
                        'joinType'=>'INNER JOIN', 
                )),
            ),
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));

但是我如何将答案附加到检索到的问题列表中。

提前感谢您提供任何帮助

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以创建更灵活的CSqlDataProvider,而不是创建CActiveDataProvider,您可以手动编写SQL查询

示例:

$dataProvider = new CSqlDataProvider($qry, array(
                'keyField' => 'id',
                'totalItemCount' => $count,
                'sort' => array(
                    'attributes' => array('field1','field2')
                ),
                'pagination' => array(
                    'pageSize' => 5
                )
                    )
    );

$ qry =用于选择记录的SQL查询

$ count =没有记录(你应该修改$ qry以上来查找记录数)

'keyField'=你应该提到keyField,如果你使用'id'以外的其他主键字段

进一步阅读CSqlDataProvider

答案 1 :(得分:1)

如果您想附上问题的答案,您只需要这样做:

$quesionsDataProvider=new CActiveDataProvider('Question', array(
        'criteria'=>array(
            'with'=>array('answers', 'hardwaredetails'=>array(  //  etc...

所以只需添加问题模型与答案模型的关系名称。