2012-07-06 60 views
1

所以,我對yii有點新了,如果這聽起來像是一個蹩腳的問題,但我有一些奇怪的行爲,我非常抱歉。我試圖加載博客文章與評論,但的actionView僅返回博客文章:CActiveDataProvider根本沒有返回任何數據,只有結構

public function actionView($id) 
    { 
      $model = $this->loadModel($id); 
      $criteria = new CDbCriteria; 
      $criteria->condition = 'postId = ' . $id; 
      $criteria->order = 'commentTime desc'; 
      $criteria->with = array('user'); 
      $dataSet = new CActiveDataProvider('Comments', array(
      'criteria' => $criteria, 
      ) 
      ); 
      echo "<pre>"; 
      print_r($dataSet); 
      echo "</pre>"; 
      $this->render('view',array(
        'model'=>$model, 
        'dataSet'=>$dataSet, 

      )); 
    } 

現在的視圖文件:

$this->renderPartial('_view',array('data'=>$model,)); 
$this->renderPartial('comments',array('data'=>$dataSet,)); 

有趣的是,根據日誌,它甚至沒有從評論表中選擇,但是當我print_r時,我得到了表格的整個結構。

CActiveDataProvider Object 
(
    [modelClass] => Comments 
    [model] => Comments Object 
     (
      [_md:CActiveRecord:private] => CActiveRecordMetaData Object 
       (
        [tableSchema] => CMysqlTableSchema Object 
         (
          [schemaName] => 
          [name] => Comments 
          [rawName] => `Comments` 
          [primaryKey] => id 
          [sequenceName] => 
          [foreignKeys] => Array 
           (
            [postId] => Array 
             (
              [0] => Posts 
              [1] => id 
             ) 

            [userId] => Array 
             (
              [0] => users 
              [1] => id 
             ) 

           ) 

          [columns] => Array 
           (
            [id] => CMysqlColumnSchema Object 
             (
              [name] => id 
              [rawName] => `id` 
              [allowNull] => 
              [dbType] => int(11) 
              [type] => integer 
              [defaultValue] => 
              [size] => 11 
              [precision] => 11 
              [scale] => 
              [isPrimaryKey] => 1 
              [isForeignKey] => 
              [autoIncrement] => 1 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [postId] => CMysqlColumnSchema Object 
             (
              [name] => postId 
              [rawName] => `postId` 
              [allowNull] => 
              [dbType] => int(11) 
              [type] => integer 
              [defaultValue] => 
              [size] => 11 
              [precision] => 11 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 1 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [userId] => CMysqlColumnSchema Object 
             (
              [name] => userId 
              [rawName] => `userId` 
              [allowNull] => 
              [dbType] => int(11) 
              [type] => integer 
              [defaultValue] => 
              [size] => 11 
              [precision] => 11 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 1 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [commentTime] => CMysqlColumnSchema Object 
             (
              [name] => commentTime 
              [rawName] => `commentTime` 
              [allowNull] => 
              [dbType] => timestamp 
              [type] => string 
              [defaultValue] => 
              [size] => 
              [precision] => 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [commentText] => CMysqlColumnSchema Object 
             (
              [name] => commentText 
              [rawName] => `commentText` 
              [allowNull] => 
              [dbType] => mediumtext 
              [type] => string 
              [defaultValue] => 
              [size] => 
              [precision] => 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [voteUp] => CMysqlColumnSchema Object 
             (
              [name] => voteUp 
              [rawName] => `voteUp` 
              [allowNull] => 
              [dbType] => mediumint(8) unsigned 
              [type] => integer 
              [defaultValue] => 0 
              [size] => 8 
              [precision] => 8 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [voteDown] => CMysqlColumnSchema Object 
             (
              [name] => voteDown 
              [rawName] => `voteDown` 
              [allowNull] => 
              [dbType] => mediumint(8) unsigned 
              [type] => integer 
              [defaultValue] => 0 
              [size] => 8 
              [precision] => 8 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

            [reports] => CMysqlColumnSchema Object 
             (
              [name] => reports 
              [rawName] => `reports` 
              [allowNull] => 
              [dbType] => smallint(5) unsigned 
              [type] => integer 
              [defaultValue] => 0 
              [size] => 5 
              [precision] => 5 
              [scale] => 
              [isPrimaryKey] => 
              [isForeignKey] => 
              [autoIncrement] => 
              [_e:CComponent:private] => 
              [_m:CComponent:private] => 
             ) 

           ) 

          [_e:CComponent:private] => 
          [_m:CComponent:private] => 
         ) 

        [columns] => Array 
         (
          [id] => CMysqlColumnSchema Object 
           (
            [name] => id 
            [rawName] => `id` 
            [allowNull] => 
            [dbType] => int(11) 
            [type] => integer 
            [defaultValue] => 
            [size] => 11 
            [precision] => 11 
            [scale] => 
            [isPrimaryKey] => 1 
            [isForeignKey] => 
            [autoIncrement] => 1 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [postId] => CMysqlColumnSchema Object 
           (
            [name] => postId 
            [rawName] => `postId` 
            [allowNull] => 
            [dbType] => int(11) 
            [type] => integer 
            [defaultValue] => 
            [size] => 11 
            [precision] => 11 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 1 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [userId] => CMysqlColumnSchema Object 
           (
            [name] => userId 
            [rawName] => `userId` 
            [allowNull] => 
            [dbType] => int(11) 
            [type] => integer 
            [defaultValue] => 
            [size] => 11 
            [precision] => 11 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 1 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [commentTime] => CMysqlColumnSchema Object 
           (
            [name] => commentTime 
            [rawName] => `commentTime` 
            [allowNull] => 
            [dbType] => timestamp 
            [type] => string 
            [defaultValue] => 
            [size] => 
            [precision] => 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [commentText] => CMysqlColumnSchema Object 
           (
            [name] => commentText 
            [rawName] => `commentText` 
            [allowNull] => 
            [dbType] => mediumtext 
            [type] => string 
            [defaultValue] => 
            [size] => 
            [precision] => 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [voteUp] => CMysqlColumnSchema Object 
           (
            [name] => voteUp 
            [rawName] => `voteUp` 
            [allowNull] => 
            [dbType] => mediumint(8) unsigned 
            [type] => integer 
            [defaultValue] => 0 
            [size] => 8 
            [precision] => 8 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [voteDown] => CMysqlColumnSchema Object 
           (
            [name] => voteDown 
            [rawName] => `voteDown` 
            [allowNull] => 
            [dbType] => mediumint(8) unsigned 
            [type] => integer 
            [defaultValue] => 0 
            [size] => 8 
            [precision] => 8 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [reports] => CMysqlColumnSchema Object 
           (
            [name] => reports 
            [rawName] => `reports` 
            [allowNull] => 
            [dbType] => smallint(5) unsigned 
            [type] => integer 
            [defaultValue] => 0 
            [size] => 5 
            [precision] => 5 
            [scale] => 
            [isPrimaryKey] => 
            [isForeignKey] => 
            [autoIncrement] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

         ) 

        [relations] => Array 
         (
          [user] => CBelongsToRelation Object 
           (
            [joinType] => LEFT OUTER JOIN 
            [on] => 
            [alias] => 
            [with] => Array 
             (
             ) 

            [together] => 
            [scopes] => 
            [name] => user 
            [className] => User 
            [foreignKey] => userId 
            [select] => * 
            [condition] => 
            [params] => Array 
             (
             ) 

            [group] => 
            [join] => 
            [having] => 
            [order] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

          [post] => CBelongsToRelation Object 
           (
            [joinType] => LEFT OUTER JOIN 
            [on] => 
            [alias] => 
            [with] => Array 
             (
             ) 

            [together] => 
            [scopes] => 
            [name] => post 
            [className] => Posts 
            [foreignKey] => postId 
            [select] => * 
            [condition] => 
            [params] => Array 
             (
             ) 

            [group] => 
            [join] => 
            [having] => 
            [order] => 
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
           ) 

         ) 

        [attributeDefaults] => Array 
         (
          [voteUp] => 0 
          [voteDown] => 0 
          [reports] => 0 
         ) 

        [_model:CActiveRecordMetaData:private] => Comments Object 
*RECURSION* 
       ) 

      [_new:CActiveRecord:private] => 
      [_attributes:CActiveRecord:private] => Array 
       (
       ) 

      [_related:CActiveRecord:private] => Array 
       (
       ) 

      [_c:CActiveRecord:private] => 
      [_pk:CActiveRecord:private] => 
      [_alias:CActiveRecord:private] => t 
      [_errors:CModel:private] => Array 
       (
       ) 

      [_validators:CModel:private] => 
      [_scenario:CModel:private] => 
      [_e:CComponent:private] => 
      [_m:CComponent:private] => 
     ) 

    [keyAttribute] => 
    [_criteria:CActiveDataProvider:private] => CDbCriteria Object 
     (
      [select] => * 
      [distinct] => 
      [condition] => postId = 2 
      [params] => Array 
       (
       ) 

      [limit] => -1 
      [offset] => -1 
      [order] => commentTime desc 
      [group] => 
      [join] => 
      [having] => 
      [with] => Array 
       (
        [0] => user 
       ) 

      [alias] => 
      [together] => 
      [index] => 
      [scopes] => 
      [_e:CComponent:private] => 
      [_m:CComponent:private] => 
     ) 

    [_id:CDataProvider:private] => Comments 
    [_data:CDataProvider:private] => 
    [_keys:CDataProvider:private] => 
    [_totalItemCount:CDataProvider:private] => 
    [_sort:CDataProvider:private] => 
    [_pagination:CDataProvider:private] => 
    [_e:CComponent:private] => 
    [_m:CComponent:private] => 
) 
+0

action_view和actionComments的控制器方法是什麼樣的?並在哪裏/什麼是print_r輸出? – ernie 2012-07-06 16:07:22

回答

2

您正在設置自己的SQL注入(或至少有一個可能性)以這種方式構建您的標準。如果你做這樣的事情,你會得到你的結果嗎?

public function actionView($id) 
{ 
     // the with will load your comments through your Blog relationship 
     // with the comments and then user your Comment -> User relationship as well 
     // doing it this way eliminates the need for creating your own criteria object 
     $model = Blog::model()->with('comments.user')->findByPk((int)$id); 

     // we then set a defaultOrder here 
     $dataSet = new CActiveDataProvider($model->comments, array(
      'sort'=>array(
       'defaultOrder'=>'commentTime desc', 
      ), 
     ) 
     ); 
     echo "<pre>"; 
     print_r($dataSet); 
     echo "</pre>"; 

     .... 

} 
+1

我必須將CActieDataProvider更改爲CArrayDataProvider,因爲我得到以下錯誤:調用非對象上的成員函數getDbCriteria()。 但現在它工作,謝謝! – David 2012-07-07 12:00:07

+0

如果你得到那個非對象錯誤,那可能是因爲你的模型 - >註釋關係沒有返回對象。可能值得檢查。 – acorncom 2012-07-07 22:57:22

1

試試這個模型調試器然後測試你的輸出,並請清楚你的問題。 http://www.kevinkorb.com/post/26

+0

這是一個非常有用的調試方式,謝謝! – David 2012-07-07 12:01:04