1

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

我希望能够做类似的事情$this->AppModel->query("SELECT * FROM some_table_in_my_db"),这样我就不必在不同的地方跟踪数据库配置,但我不知道如何实现这一点。

另外,我觉得重要的是要提到我正在使用的表不遵守 CakePHP 表命名约定。它们早于我们对 CakePHP 的使用,因此我无法更改我的表格以适应 CakePHP 的模型格式。这就是为什么我希望通过类似的方式访问通用数据库query

编辑:我已经构建了一个临时解决方案,但我知道一个更好的解决方案是可能的。我的蛋糕应用程序中有一个模型,MySimpleConstuct然后在库文件中包含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);

这并不理想,所以我仍在寻找更好的解决方案。任何帮助将不胜感激。

4

1 回答 1

1

@John Galt,我想这不是完全相同的副本,但它非常相似,而且该解决方案似乎非常直接地适用于您的情况。您可以考虑使用的另一种技术是在控制器中实例化库,然后给它一个模型的引用。

class TestController extends AppController {
    function index(){
        App::uses('TheLibrary', 'Lib');
        $obj = new TheLibrary();
        $obj->GivenModel = &$this->GivenModel;
    }
}

-EDIT- 然后在您编写的库中执行类似的操作。

class TheLibrary {
    var $GivenModel = null;

    function some_query(){
        return $this->GivenModel->query('SELECT * FROM like_some_table_dude WHERE 1');
    }
}

第一个代码片段是控制器实例化您的库,然后为库提供对模型的引用作为属性 GivenModel。“&”符号使赋值成为引用(请参阅PHP 中的“&”符号如何影响结果?)。第二个代码片段是库如何使用该属性的示例。

我确实了解您正在尝试使用库中的模型,这就是您在编辑中拥有的解决方案和我提出的解决方案都可以做到的。但是我会再次指出,这不是正确的 MVC 约定,您应该重新考虑如何使用库。

于 2013-07-01T22:40:54.530 回答