2012-07-06 36 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