我正在 CakePHP 3 中构建一个应用程序。它使用了许多未按照 Cake 约定构建的遗留数据库。
我不想使用 Cake 提供的任何 ORM 功能,因为设置所有关系比仅仅编写“原始 SQL”更加乏味。我们也不打算对数据库结构进行任何更改,因此 ORM 是行不通的。所以我将为所有内容编写原始 SQL 查询。
但是,我不确定此代码将放在哪里。我读过https://book.cakephp.org/3.0/en/orm/database-basics.html#running-select-statements但它并没有说明您实际将该代码放在哪里。
理想情况下,我不想将查询放入 Controller 中,因为这违背了 MVC 的目的。
我真正需要的是一个模型,我可以将所有查询放入不同的函数中,并在我的 Controller 中引用它们。
在 Cake 2.x 中,很容易在 app/Model/
下创建一个模型,然后在 Controller 中需要的地方加载它 (loadModel
)。但是对于新的 Cake 3.x Table
和 Entity
空间,我不确定它如何适应?
我还阅读了 Modelless Forms但也不认为他们是对的。例如,应用程序的初始页面显示化学品列表,这只是一个 SELECT
语句 - 在此阶段它根本不涉及表单或用户输入。
显然,在某些情况下我需要将数据从 Controller 传递到模型,例如基于用户输入的查询。
最佳答案
正如评论中提到的,我建议不要放弃 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();
另请参阅
关于php - 在 CakePHP 3 中将自定义 SQL 代码放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44696164/