带有$ useTable = false的CakePHP模型仍尝试连接到数据库

时间:2013-03-22 12:38:32

标签: cakephp cakephp-2.1

我正在尝试开发一个不使用数据库但仍有一些模型的应用程序。

第一个问题:但是看看Cake的数据库配置(APP / Lib / Cake / Model / ConnectionManager.php,第69行),它试图包含文件Config / database.php。

如果文件不存在,我会收到2个警告。如果它存在(即使它是完全空的)都可以。我想澄清一下即使没有模型也会发生这种情况。

第二个问题:如果我尝试使用模型,我会收到错误:

Missing Datasource Configuration
Error: The datasource configuration default was not found in database.php.

无论Config / database.php文件是否存在,都会发生这种情况。

最后,我指定模型(包括AppModel)将属性$ useTable设置为false,但似乎没有区别。

但我注意到,在使用数据库的应用程序中,只有少数模型不使用它(但整个应用程序使用它),一切正常。

我发现this提出了一个解决方案,然后就是在网络上找到的解决方案。

但是,在评论中,我读到Lorenzo说:

  

这根本没有任何意义,CakePHP 2.0不会尝试   执行任何数据库连接,除非您要求它执行此操作

在我看来它没有,也许CakePHP不执行任何查询但仍然希望配置数据库。是这样吗?或者我错过了什么?

谢谢。

1 个答案:

答案 0 :(得分:4)

可能的原因

但是,在实际需要之前,CakePHP不会尝试连接到数据库;

  • app / Config / database.php文件应该始终,即使您没有使用数据库。但是,如果您不使用它们,则不必“配置”各种连接
  • 如果您的模型使用行为,则行为可能会导致数据库调用,导致CakePHP尝试连接到数据库
  • Model类中的各种方法将建立与数据库的连接(例如,请求'schema'或'columnType'。
  • 不存在的模型方法将映射到魔术__call()方法;此方法将首先检查Behavior是否能够处理该调用,否则将调用该数据库。例如。使用$this->Mymodel->doSomething()将导致CakePHP尝试打开数据库连接并在数据库中执行doSomething
  • 如果模型不存在, CakePHP将创建一个,基本上,它使用数据库中的模式信息创建Model 的实例 ,导致连接被打开。

实施例

class PostsController extends AppController {
    // This controller does not use a Model
    public $uses = false;

    public function index() {
        // CakePHP will construct a 'Post' model here
        $this->Post->find('something');
    }

}

数据源,即使没有使用数据库

说完了。在大多数情况下,最好让模型使用数据源;数据源必须是数据库,但也可以是Twitter Feed或静态Array()

拥有数据源简化了大多数任务(例如,您只需执行find(....)即可从源获取数据,无论是否为数据库。