我正在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 Table
和Entity
空格,我不确定它是如何适应的?
我也读过Modelless Forms,但不认为他们也是对的。例如,应用程序的初始页面显示的化学品列表只是SELECT
语句 - 在此阶段根本不涉及表单或用户输入。
显然,还有一些情况需要将数据从Controller传递给模型,例如基于用户输入的查询。
任何建议都将不胜感激。
答案 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();
另见