CakePHP - 查询是模型函数的名称

时间:2011-06-13 04:37:30

标签: php mysql cakephp

控制器:

<?php
class VideosController extends ForumAppController {

    /**
     * Controller Name
     * @access public
     * @var string
     */
    public $name = 'Videos';


    public function index() {
        $videos = $this->Video->getVideos();
        $this->set('videos', $videos);
    }

    public function beforeFilter() {    
        parent::beforeFilter();

        $this->Auth->allow('*');

        if (isset($this->params['admin'])) {
            $this->Toolbar->verifyAdmin();
            $this->layout = 'admin';
        }       
        $this->Security->validatePost = false;
        $this->set('menuTab', 'videos');
    }

}

?>

型号:

<?php
class Video extends ForumAppModel {

    public $name = 'Video';

    function getVideos() {

        $vids = $this->find('all', array (
            'order'     =>  array('Video.id DESC')
        ));

      return $vids;
    }

}

?>

我收到错误:

Notice (8): Undefined property: VideosController::$Video [CORE/plugins/forum/controllers/videos_controller.php, line 13]

如果我这样做

$this->loadModel('video');

我收到错误:

Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'getVideos' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 549]
**Query: getVideos** 

任何可能导致此问题的想法?

2 个答案:

答案 0 :(得分:1)

您的代码似乎是正确的,但似乎CakePHP并未尝试从正确的位置加载模型。您可以使用控制器中的$ uses变量指定要加载的模型。

因为您使用的是插件,所以需要在模型前面添加插件的名称。

$uses = array('Forum.Video');

CakePHP应该自己处理它,但是一些旧版本的CakePHP有一个错误,阻止它正常工作。它似乎在1.3.10中得到修复。

有关$ uses变量的更多详细信息,请参阅http://book.cakephp.org/view/961/components-helpers-and-uses

答案 1 :(得分:0)

$ name变量是控制器名称,而不是模型名称控制器使用,

试试这个

$uses = "Videos"