0

CActiveDataProvider を使用して 2 つのテーブルを結合する際に問題が発生しました

テーブルは次のとおりです: question(id,description) 、 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),

助けてくれてありがとう :)

EDIT: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];
4

1 に答える 1

0

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),

于 2014-07-28T10:04:42.810 に答える