Mysql 如何从CakePHP库中引用数据库

Mysql 如何从CakePHP库中引用数据库,mysql,database,cakephp,cakephp-2.0,Mysql,Database,Cakephp,Cakephp 2.0,我在CakePHP 2.0应用程序中创建了一个库类文件。它是一个名为emailManager的PHP类,存在于CakePHP的libaray文件夹中的emailManager文件夹中。我想知道从这个库类引用数据库的最简单方法是什么 我希望能够像$this->AppModel->query(“从我的数据库中的某个表中选择*),这样我就不必在单独的地方跟踪数据库配置,但我不确定如何实现这一点 另外,我觉得有一点很重要,那就是我使用的表不符合CakePHP表命名约定。它们早于我们使用CakePHP的时

我在CakePHP 2.0应用程序中创建了一个库类文件。它是一个名为
emailManager
的PHP类,存在于CakePHP的libaray文件夹中的
emailManager
文件夹中。我想知道从这个库类引用数据库的最简单方法是什么

我希望能够像
$this->AppModel->query(“从我的数据库中的某个表中选择*)
,这样我就不必在单独的地方跟踪数据库配置,但我不确定如何实现这一点

另外,我觉得有一点很重要,那就是我使用的表不符合CakePHP表命名约定。它们早于我们使用CakePHP的时间,因此我无法更改我的表以适应CakePHP的模型格式。这就是为什么我希望通过
query

编辑:我已经构建了一个临时解决方案,但我知道更好的解决方案是可能的。 我的cake应用程序中有一个名为
MySimpleConstruct
的模型,然后在库文件中包括
MySimpleConstruct
模型,如下所示:

 // import this model
 $this->GivenModel = ClassRegistry::init('MySimpleConstruct');
 $this->GivenModel = new MySimpleConstruct();

 // Then it is possible to do as followed:
 $table_data = $this->GivenModel->query('SELECT * FROM like_some_table_dude' WHERE 1);
这并不理想,因此我仍在寻找更好的解决方案。
任何帮助都将不胜感激。

@John Galt,我想这不是一个完全相同的副本,但它非常相似,而且解决方案似乎非常直接地适用于您的情况。 您可以考虑使用的另一种技术是实例化控制器中的库,而不给它提供模型参考。
class TestController extends AppController {
    function index(){
        App::uses('TheLibrary', 'Lib');
        $obj = new TheLibrary();
        $obj->GivenModel = &$this->GivenModel;
    }
}
-编辑- 然后在你写的库中做一些类似的事情

class TheLibrary {
    var $GivenModel = null;

    function some_query(){
        return $this->GivenModel->query('SELECT * FROM like_some_table_dude WHERE 1');
    }
}
第一个代码段是控制器实例化库,然后将模型的引用作为属性GivenModel提供给库。“&”符号使分配成为参考(请参阅)。第二个代码片段是库如何使用该属性的示例


我知道您正在尝试使用库中的模型,这就是您在编辑中使用的解决方案和我建议的解决方案所做的。然而,我将再次指出,这不是合适的MVC约定,您应该重新考虑如何使用库

@John Galt,我想这不是一个精确的复制品,但它非常相似,而且解决方案似乎非常直接地适用于您的情况。 您可以考虑使用的另一种技术是实例化控制器中的库,而不给它提供模型参考。
class TestController extends AppController {
    function index(){
        App::uses('TheLibrary', 'Lib');
        $obj = new TheLibrary();
        $obj->GivenModel = &$this->GivenModel;
    }
}
-编辑- 然后在你写的库中做一些类似的事情

class TheLibrary {
    var $GivenModel = null;

    function some_query(){
        return $this->GivenModel->query('SELECT * FROM like_some_table_dude WHERE 1');
    }
}
第一个代码段是控制器实例化库,然后将模型的引用作为属性GivenModel提供给库。“&”符号使分配成为参考(请参阅)。第二个代码片段是库如何使用该属性的示例


我知道您正在尝试使用库中的模型,这就是您在编辑中使用的解决方案和我建议的解决方案所做的。然而,我将再次指出,这不是合适的MVC约定,您应该重新考虑如何使用库

重复的?@azBrian我不认为是,这些问题是相关的,但这是我在准备这篇文章时回顾的问题之一。您对如何构建一个比我这里的编辑描述的更好的解决方案有什么建议吗?我仍然对一个比我现在使用的答案更好的答案很感兴趣。重复的?@azBrian我不认为是这样,这些问题是相关的,但这是我在准备这个问题时复习的问题之一。您对如何构建一个比我这里的编辑描述的更好的解决方案有什么建议吗?我仍然对一个比我现在使用的更好的答案很感兴趣。啊,好吧,我现在想我明白了困惑是从哪里来的。我解释得不够清楚。我正在寻找一种从库中引用主应用程序数据库的方法。我想我给人的印象是,我正在寻找一种方法,从应用程序中的模型中引用库,而这不是我遇到的问题。谢谢你。稍后我将查看您的
&
符号。嗯,您问题的编辑很有趣。在漫长的工作日之后,我将回顾这一点。干杯,伙计。啊,好吧,我现在想我明白了困惑是从哪里来的了。我解释得不够清楚。我正在寻找一种从库中引用主应用程序数据库的方法。我想我给人的印象是,我正在寻找一种方法,从应用程序中的模型中引用库,而这不是我遇到的问题。谢谢你。稍后我将查看您的
&
符号。嗯,您问题的编辑很有趣。在漫长的工作日之后,我将回顾这一点。干杯,伙计。