2012-01-17 127 views
0

创建与细节CActiveDataProvider我有数据库关系之间问题表硬件详细信息表如下。 问题硬件详情有很多关系。和tbl_quesionhardwaredetial表保存为一个给定的硬件细节问题和相关答案列表称为答案Yii框架:从两个表

我想创建活动数据提供商(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

+1

该图不符合您对关系描述 – 2012-01-17 17:05:29

+0

为什么它正确解释了tbl_question和tbl_hardwaredetail之间的多对多关系。和持有多对多关系的表是tbl_quetionhardwaredetial。它增加了一个叫做答案 – KItis 2012-01-17 17:22:09

+0

的问题和hardwaredetail没有直接关系 – 2012-01-17 17:28:03

回答

3

而不是创造CActiveDataProvider您可以创建CSqlDataProvider哪个更灵活,你可以手工编写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'=你应该提到关键字段,如果你如果想要的答案附加到问题的所有你所要做的使用比“身份证”

进一步阅读CSqlDataProvider

+0

谢谢你的回答 – KItis 2012-01-18 04:52:49

1

其他不同的主键字段是:

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

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