CakePHP 3 - 在哪里放置自定义SQL代码

时间:2017-06-22 10:00:55

标签: php mysql cakephp cakephp-3.0

我正在CakePHP 3中构建一个应用程序。它使用了许多未在Cake约定中构建的遗留数据库。

我不想使用Cake提供的任何ORM功能,因为设置所有关系比编写“Raw SQL”更加冗长乏味。我们也不会对数据库结构进行任何更改,因此ORM是非启动程序。因此,我将为所有内容编写原始SQL查询。

但是,我不确定 这个代码的放置位置。我已阅读https://book.cakephp.org/3.0/en/orm/database-basics.html#running-select-statements,但它没有说明您实际放置该代码的位置。

我不想理想地将我的查询放在控制器中,因为这会破坏MVC的目的。

我真正需要的是一个模型,我可以将所有查询放在不同的函数中,并在我的控制器中引用它们。

在Cake 2.x中,很容易在app/Model/下创建一个模型,然后在控制器所需的位置加载它(loadModel)。但是使用新的Cake 3.x TableEntity空格,我不确定它是如何适应的?

我也读过Modelless Forms,但不认为他们也是对的。例如,应用程序的初始页面显示的化学品列表只是SELECT语句 - 在此阶段根本不涉及表单或用户输入。

显然,还有一些情况需要将数据从Controller传递给模型,例如基于用户输入的查询。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

正如评论中提到的,我建议不要放弃ORM,它有很多好处,从长远来看,你很可能会后悔。

设置表格不是什么大不了的事情,你可以把所有东西都烧掉,并用例如重做引号和文件名的脏工作的IDE进行重构,然后设置规则和关联手动,这可能有点单调乏味,但总体来说非常简单,因为对于数据库模式而言,配置不应该比外键,可能还有关联属性名称(可能需要更新)可能的实体@property注释也许 - 也许这里和那里也有条件和东西,但是很好。

话虽如此,为了完整起见,您始终可以随心所欲地创建任何您想要的逻辑。 CakePHP只是PHP,因此您可以简单地在Model命名空间(这是模型相关逻辑的自然拟合)的某处创建一个类,并在任何需要的地方使用它。就像任何其他类一样。

// src/Model/SomeModelRelatedClass.php

namespace App\Model;

class SomeModelRelatedClass
{
    public function queryTheDatabase()
    {
        // ...
    }
}
$inst = new \App\Model\SomeModelRelatedClass();
$results = $inst->queryTheDatabase();

另见