php - 在 CakePHP 3 中将自定义 SQL 代码放在哪里?

标签 php mysql cakephp cakephp-3.0

我正在 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 TableEntity 空间,我不确定它如何适应?

我还阅读了 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/

相关文章:

查询完成后的 PHP Mysqli 请求 Url

mysql - SQL语句连接三张表

java - 无法从 Java 程序连接到数据库

php - CakePHP 重定向状态代码 404

php - 将从mysql获取的数据以逗号分隔排列并计数

javascript - 当包含在顶部带有 HTML 标签的另一个文件中时,无限滚动不会在向下滚动时加载更多帖子

php - 在 php 命名空间中,我是否需要要求每个文件

php - 如何根据使用 PHP 和 MySQL 输入 MySQL 数据库的次数来显示更大的文本?

来自数据库的 cakephp 编码

php - CakePHP 中保存数据的最佳实践,在组件中使用模型