【问题标题】:Interesting CakePHP failure ! Why?有趣的 CakePHP 失败!为什么?
【发布时间】:2012-12-14 02:28:35
【问题描述】:

使用 cakephp 2.2.4 稳定版我制作了一个高级博客应用程序。

-- 模型是:帖子、用户、视图。

失败有不同的结束方式。有时它以致命错误结束:调用未定义的方法 View::find(),有时会收到脚本试图分配一些字节的错误,有时 chrome 会显示 ERR_CONNECTION_RESET。

查看模型:

class View extends AppModel {
public $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);
}

我正在尝试访问的操作:

public function top_today($type = null) {


                $posts = $this->paginate('Post', array('Post.created_time BETWEEN ? AND?' => array(date('Y-m-d'),date('Y-m-d', strtotime("+1 day")))));

                if(!empty($posts)){
                    App::import('Model', 'Rating');
                    App::import('Model', 'View');
                    $rating = new Rating();
                    $view = new View();


                    $i=0;
                        foreach($posts as $post){
                            $plus = $rating->find('count', array('conditions'=>array('Rating.object_type' => 'post', 'Rating.object_id' => $post['Post']['id'], 'Rating.value' => 'plus')));
                            $minus = $rating->find('count', array('conditions'=>array('Rating.object_type' => 'post', 'Rating.object_id' => $post['Post']['id'], 'Rating.value' => 'minus')));
                            $posts[$i]['Post']['rating'] = $plus-$minus;

                            $views = $view->find('count', array('conditions'=>array('View.object_type' => 'post', 'View.object_id' => $post['Post']['id'])));
                            $posts[$i]['Post']['views'] = $views;
                            $i++;
                        }

                }
                $this->set('posts',$posts);


    }

当我不计算观看次数时一切顺利,但与评分算法相同!

View 表有以下列:id (A_I) user_id object_id object_type created_time。

错误日志也写了很多行:

2012-12-28 22:13:31 错误:致命错误(256):[PDOException] SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'render' 附近使用正确的语法

0 D:\xampp\htdocs\lib\Cake\Model\Datasource\DboSource.php(459): PDOStatement-execute(Array)

1 D:\xampp\htdocs\lib\Cake\Model\Datasource\DboSource.php(425): DboSource->_execute('render', Array)

2 D:\xampp\htdocs\lib\Cake\Model\Datasource\DboSource.php(669): DboSource->execute('render', Array, Array)

3 D:\xampp\htdocs\lib\Cake\Model\Datasource\DboSource.php(611): DboSource->fetchAll('render', Array, Array)

4 D:\xampp\htdocs\lib\Cake\Model\Model.php(788): DboSource->query('render', Array, Object(View))

5 D:\xampp\htdocs\lib\Cake\Error\ExceptionRenderer.php(300): 模型->__call('render', Array)

6 D:\xampp\htdocs\lib\Cake\Error\ExceptionRenderer.php(300): View->render('error500', 'error')

7 D:\xampp\htdocs\lib\Cake\Error\ExceptionRenderer.php(281): ExceptionRenderer->_outputMessageSafe('error500')

8 D:\xampp\htdocs\lib\Cake\Error\ExceptionRenderer.php(195): ExceptionRenderer->_outputMessage('fatalError')

9【内部函数】:ExceptionRenderer->_cakeError(Object(FatalErrorException))

10 D:\xampp\htdocs\lib\Cake\Error\ExceptionRenderer.php(173): call_user_func_array(Array, Array)

11 D:\xampp\htdocs\lib\Cake\Error\ErrorHandler.php(126): ExceptionRenderer->render()

12【内部函数】:ErrorHandler::handleException(Object(FatalErrorException))

最多重复 100 次{

13 D:\xampp\htdocs\lib\Cake\Error\ErrorHandler.php(211): call_user_func('ErrorHandler::h...', Object(FatalErrorException))

14 D:\xampp\htdocs\lib\Cake\Error\ErrorHandler.php(161): ErrorHandler::handleFatalError(256, '[PDOException] ...', 'D:\xampp\htdocs... ', 135)

15 [内部函数]: ErrorHandler::handleError(256, '[PDOException] ...', 'D:\xampp\htdocs...', 135, 数组)

16 D:\xampp\htdocs\lib\Cake\Error\ErrorHandler.php(135): trigger_error('[PDOException] ...', 256)

}

我被这个问题困扰了 2 天。

附: : 我在 xampp,试过 PHP 5.3.8.1 和 5.4.1。

【问题讨论】:

  • 考虑到你使用的是 2.x,你不应该使用App::import(),你也不应该使用new MyModel();。在 foreach 循环中运行一个简单的计数查询是没有意义的,因为它可以很容易地作为原始查询的连接来完成。 foreach($posts as $i => $post) 消除了保留计数器的需要。 0/10 用于您的代码。

标签: php cakephp


【解决方案1】:

问题可能是您的View 模型的名称,因为CakePHP 已经包含View 类。重命名您的模型(和相应的表)应该可以解决问题。

【讨论】:

  • 天哪,是的,是的:D
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 2020-02-20
  • 2019-12-05
  • 2011-05-16
  • 2015-06-19
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多