提问者:小点点

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


我正在努力研发不使用数据库的应用程序,但它仍然有一些模型。

第一个问题:但是,如果要查看数据库的配置(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,但这似乎没有什么区别。

但我注意到,在使用数据库的应用程序中,只有少数模型不使用数据库(但整个应用程序都使用数据库),所有功能都正常工作。

我发现了这一点,它提出了一个解决方案,这就是在web上找到的解决方案。

但在下面的评论中,我看到洛伦佐说:

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

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

非常感谢。


共1个答案

匿名用户

但是,CakePHP在实际需要时才尝试连接到数据库;

  • app/Config/database。php文件应该始终存在,即使您没有使用数据库。但是,如果不使用各种连接,则不必“配置”它们
  • 如果您的模型使用行为,则可能是该行为进行了数据库调用,导致CakePHP尝试连接到数据库
  • 模型类中的各种方法将连接到数据库(例如,请求“schema”或“columnType”。
  • 不存在的模型方法将映射到magic\u call()方法;此方法将首先检查行为是否能够处理调用,否则将调用数据库。例如,使用$this-

示例

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()

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