【问题标题】:Yii framework: Creating CActiveDataProvider with details from two tablesYii 框架:使用来自两个表的详细信息创建 CActiveDataProvider
【发布时间】:2012-01-17 06:34:50
【问题描述】:

问题表硬件详细表之间的数据库关系如下。 QuestionHardwareDetail 有多对多的关系。 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,
            ),
        ));

但是我怎样才能将答案附加到检索到的问题列表中。

提前感谢您的帮助

【问题讨论】:

  • 这张图不符合你对关系的描述
  • 为什么,它正确解释了 tbl_question 和 tbl_hardwaredetail 之间的多对多关系。保持多对多关系的表是 tbl_quetionhardwaredetial。它添加了名为 answer 的字段
  • question 和 hardwaredetail 没有直接关系
  • 是的,因为它是多对多关系

标签: php yii


【解决方案1】:

您可以创建更灵活的 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 = no of records(你应该修改上面的$qry来找到记录数)

'keyField'= 如果您使用除 'id' 以外的其他主键字段,则应提及 keyField

进一步阅读CSqlDataProvider

【讨论】:

    【解决方案2】:

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

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

    所以只需添加 Question 模型与 Answer 模型的关系名称即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多