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

Php Yii框架:使用两个表中的详细信息创建CActiveDataProvider,php,yii,Php,Yii,我在问题表和硬件细节表之间有如下数据库关系。 问题和硬件细节有多对多的关系。tbl_quenceHardwareDiatial表还包含另一个名为answer的新属性 我想创建活动数据提供程序(CActiveDataProvider),其中包含给定硬件细节的问题列表和相关答案 我已经使用以下标准针对给定硬件细节提出了相关问题 $quesionsDataProvider=new CActiveDataProvider('Question', array( 'criteria'

我在问题表硬件细节表之间有如下数据库关系。 问题和硬件细节有多对多的关系。tbl_quenceHardwareDiatial表还包含另一个名为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,
            ),
        ));
但是我怎样才能将答案附加到检索到的问题列表中呢

提前谢谢你的帮助


您可以创建更加灵活的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”=如果使用除“id”以外的其他主键字段,则应提及keyField


进一步阅读

您可以创建更加灵活的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”=如果使用除“id”以外的其他主键字段,则应提及keyField


进一步阅读

如果你想附上问题的答案,你需要做的就是:

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

因此,只需添加问题模型与答案模型之间关系的名称。

如果您想将答案附加到问题,则只需执行以下操作:

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

因此,只需添加问题模型与答案模型之间关系的名称。

该图不符合您对关系的描述,因此,它正确地解释了tbl_问题和tbl_硬件细节之间的多对多关系。而包含多对多关系的表是tbl______________________________。它添加了名为answerquestion和hardwaredetail的字段没有直接关系是的,因为它是多对多关系,所以图表不符合您对关系的描述。为什么,它正确地解释了tbl_问题和tbl_hardwaredetail之间的多对多关系。而包含多对多关系的表是tbl______________________________。它添加了一个名为answerquestion的字段,而hardwaredetail没有直接关系是的,因为它是多对多关系