我已经在我的CakePHP 2.0应用程序中创建了一个库类文件。它是一个名为emailManager
的PHP类,存在于CakePHP的libaray文件夹中的emailManager
文件夹中。我想知道从这个库类引用数据库的最简单方法是什么。
我希望能够像这样做$this-
另外,我觉得有一点很重要,那就是我使用的表不符合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);
这并不理想,因此我仍在寻找更好的解决方案。任何帮助都将不胜感激。
@约翰·高尔特,我想这不是一个精确的复制品,但它非常相似,而且这个解决方案确实非常直接地适用于你的情况。您可以考虑使用的另一种技术是实例化控制器中的库,而不给它提供模型参考。
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约定,您应该重新考虑如何使用库。