2

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

第一个问题: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,但似乎没有区别。

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

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

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

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

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

谢谢你。

4

1 回答 1

4

可能的原因

然而,CakePHP 在实际需要之前不会尝试连接到数据库。

  • app/Config/database.php 文件应该始终存在,即使您没有使用数据库。但是,如果您不使用它们,则不必“配置”各种连接
  • 如果您的模型使用行为,则数据库调用可能是由行为进行的,导致 CakePHP 尝试连接到数据库
  • Model 类中的各种方法将连接到数据库(例如请求“schema”或“columnType”。
  • 不存在的模型方法将被映射到一个魔术__call()方法;此方法将首先检查 Behavior 是否能够处理调用,否则将调用数据库。例如 using$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');
    }

}

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

话说回来。在大多数情况下,最好让您的模型使用数据源;数据源不必数据库,但也可以是例如 aTwitter Feed或 static Array()

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

于 2013-03-22T13:21:49.457 回答