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

$useTable=false的CakePHP模型仍在尝试连接到数据库,cakephp,cakephp-2.1,Cakephp,Cakephp 2.1,我正在尝试开发一个不使用数据库的应用程序,但它仍然有一些模型 第一个问题:但是,如果要查看数据库的配置(APP/Lib/Cake/Model/ConnectionManager.php,第69行),它会尝试包含Config/database.php文件 如果文件不存在,我会收到2条警告。如果它存在(即使它是完全空的),一切正常。我想澄清的是,即使在没有模型的情况下也会发生这种情况 第二个问题:如果我尝试使用模型,我会得到错误: Missing Datasource Configuration E

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

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

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

我找到了一个解决方案,这就是在网络上找到的解决方案

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

这毫无意义,CakePHP2.0不会尝试 执行任何datbase连接,除非您要求这样做

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

谢谢。

可能的原因 但是,CakePHP在实际需要时才尝试连接到数据库

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

数据源,即使未使用数据库 话虽如此,在大多数情况下,最好让您的模型使用数据源;数据源不一定是数据库,但也可能是数据库或静态数据库

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

可能的原因 但是,CakePHP在实际需要时才尝试连接到数据库

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

数据源,即使未使用数据库 话虽如此,在大多数情况下,最好让您的模型使用数据源;数据源不一定是数据库,但也可能是数据库或静态数据库


拥有数据源可以简化大多数任务(例如,您只需执行
find(…)
从您的源代码获取数据,无论该源代码是否为数据库。

您没有与我们共享您的代码。尤其是尝试访问数据库的模型。我打赌您忘记了那里的
public$useTable=>false
。@马克,谢谢,但您似乎没有仔细阅读我的问题。也许您没有正确设置它。这就是我的原因t对于发布代码至关重要。另外请注意,这可能已在稍后的cake版本中修复。请使用当前的2.3 master分支尝试您的代码,并确认此“问题”仍然存在。@mark,没有代码可看。我的应用程序现在在没有模型和数据库的情况下可以正常工作,但是Config/database.php文件必须存在,即使是空的。如果没有,我会收到2条警告。如果我创建了一个完全为空的模型,并且仅当属性$useTable设置为false时,我会收到数据库不正确的错误我明白了。我使用的是Cake 2.3.1,很抱歉标记错误。@马克,你也可以用一个空的应用程序来尝试。你知道你刚下载的应用程序中的PagesController吗?下载Cake,将tmp/设置为可写,然后打开主页。往下看。你会发现他仍然想要数据库文件。你没有与我们共享你的代码。尤其是模式试图访问数据库的l。我打赌你忘了
public$useTable=>falseclass 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');
    }

}