【问题标题】:Join 2 tables using CActiveDataProvider使用 CActiveDataProvider 连接 2 个表
【发布时间】:2014-07-28 10:00:18
【问题描述】:

我在使用 CActiveDataProvider 连接两个表时遇到了一些问题

这些表格是: 问题(ID,描述), questionInFeedback(feedbackId,questionId)

和关系:

反馈=>

'questionInFeedbacks' => array(self::HAS_MANY,'QuestionInFeedback','feedbackId'),

问题=>

'questionInFeedbacks' => array(self::HAS_MANY,'QuestionInFeedback','questionId'),

questionInFeedback=>

'feedback' => array(self::BELONGS_TO, 'Feedback', 'feedbackId'),
'question' => array(self::BELONGS_TO, 'Question', 'questionId'),

如果我可以使用 SQL,那么我会使用

SELECT q.id
FROM questionInFeedback AS qf,Question AS q
WHERE qf.question_id=q.id

我需要这些问题 ID 以在反馈视图中显示与反馈相关的问题。

受保护/控制器/反馈控制器:

$issueDataProvider=new CActiveDataProvider('Question', array(
            'criteria'=>array(
                'condition'=>'',
                'params'=>array(':questionId'=>$this->loadModel($id)->id),

感谢您的帮助:)

编辑: Yii 给了我以下错误;

“为 foreach() 提供的参数无效”,第 826 行被突出显示。

{
815         // determine the primary key value
816         if(is_string($this->_pkAlias))  // single key
817         {
818             if(isset($row[$this->_pkAlias]))
819                 $pk=$row[$this->_pkAlias];
820             else    // no matching related objects
821                 return null;
822         }
823         else // is_array, composite key
824         {
825             $pk=array();
826             foreach($this->_pkAlias as $name=>$alias)
827             {
828                 if(isset($row[$alias]))
829                     $pk[$name]=$row[$alias];
830                 else    // no matching related objects
831                     return null;
832             }
833             $pk=serialize($pk);
834         }
835 
836         // retrieve or populate the record according to the primary key value
837         if(isset($this->records[$pk]))
838             $record=$this->records[$pk];

【问题讨论】:

    标签: php sql yii cactivedataprovider


    【解决方案1】:

    您可以使用条件的with 属性来指定关系:

    $issueDataProvider=new CActiveDataProvider('Question', array(
        'criteria'=>array(
            'condition'=>'t.id = :questionId',
            'params'=>array(':questionId'=>$this->loadModel($id)->id),
             'with' => array('questionInFeedbacks'),
        )
    );
    

    顺便说一下,不确定您的loadModel 方法,但$this->loadModel($id)->id 可能会返回与$id 相同的值

    所以'params'=>array(':questionId'=>$this->loadModel($id)->id), 可以改为'params'=>array(':questionId'=>$id),

    【讨论】:

    • 嘿,感谢您的快速回答。现在的问题是关于“别名”的问题 - 不确定这意味着什么。错误:为 foreach() 提供的参数无效
    • 你能编辑你的错误问题吗? (带有堆栈跟踪)
    • yii执行了什么SQL请求?
    • 您好,感谢您的帮助。执行的 SQL 是: SELECT COUNT(DISTINCT t.id) FROM question t LEFT OUTER JOIN question_in_feedback questionInFeedbacks ON (questionInFeedbacks.questionId=@987653335@=@9876534. ) WHERE (t.id = :questionId)
    • 也许问题是我的一个表有一个复合键而不是 PK?(在Feedback 中没有 PK 有问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多