0

Cakephp 2.2.4 安定版を使用して、高度なブログ アプリケーションを作成します。

-- モデルは、Post、User、View です。

失敗にはさまざまな終わり方があります。致命的なエラーで終了する場合もあります: 未定義のメソッド 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 構文にエラーがあります。1行目の「render」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

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

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): Model->__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(配列、配列)

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

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

}

私はこの問題に2日間立ち往生しています。

PS:私はxamppを使用しています.PHP 5.3.8.1と5.4.1を試しました。

4

1 に答える 1

2

ViewCakePHPにはすでにViewクラスが含まれているため、問題はおそらくモデルの名前です。モデル(および対応するテーブル)の名前を変更すると、問題が解決するはずです。

于 2012-12-29T06:02:05.150 に答える