我正在CakePHP 3中构建一个应用程序。它使用了许多不在Cake约定中构建的旧数据库。
我不想使用Cake提供的任何ORM功能,因为建立所有关系比编写“原始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传递到Model,例如基于用户输入的查询。
任何意见,将不胜感激。
最佳答案
如评论中所述,我建议不要放弃ORM,它有很多好处,从长远来看,您很可能会后悔。
设置表应该没什么大不了的,您可以烘烤所有内容,并使用例如IDE进行重构,该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();
也可以看看
Cookbook > Database Access & ORM > Associations - Linking Tables Together > BelongsTo Associations
关于php - CakePHP 3-在哪里放置自定义SQL代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44696164/