2017-06-22 66 views
0

我正在CakePHP 3中构建一个应用程序。它使用了许多遗留数据库,这些数据库不是在Cake的约定中构建的。CakePHP 3 - 在哪里放置自定义的SQL代码

我不想使用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)即可。但随着新的蛋糕3.x TableEntity空间,我不知道这是如何适合?

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

很明显,我也需要将数据从控制器传递给模型,例如,基于用户输入的查询。

任何意见,将不胜感激。

+1

真的看到了吗?仅仅因为一些配置工作,你想要放弃ORM的功能和所有与之相关的功能?听起来对我来说不是一件好事,可能是交易历史上最糟糕的交易,也许是永远;)这就是说,你可以随时随地创建你喜欢的任何类,毕竟CakePHP只是PHP ,模型相关逻辑的适当位置自然就是'Model'命名空间。 – ndm

+0

@ndm,我完全同意你说的话。我不想按照我计划的方式来完成,但给你一个想法,我们有大约5个数据库 - 没有一个使用Cake公约。大约有20张桌子。你想写超过100件事情的密钥和关系的名字?或者我在脑海中过度复杂化?我们不能在数据库级别更改任何内容(因为其他应用程序已编码)。所以这一切都必须在模型中定义。很多数据库连接 - 使用ORM还是只写SQL更容易?这似乎令人望而生畏:) – Andy

+0

顺便提一下,如果以非ORM方式执行操作,您可以举一个例子说明将文件放在哪里(大概在'src/Model'中)以及如何将它加载到控制器中? – Andy

回答

1

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

设置表不应该是一个大问题,你可以烘烤所有东西,然后使用例如重命名引用和文件名的肮脏工作进行重构,然后手动设置规则和关联,这可能有点乏味,但总体来说非常简单,因为在数据库模式方面,除了外键和可能的关联属性名称(这可能需要更新可能的实体@property注释也可以) - 也许这里和那里还有条件和东西,但是哦。这就是说,为了完整起见,你可以随时随地创建任何你想要的逻辑。 CakePHP只是PHP,所以你可以简单地在Model命名空间的某个地方创建一个类(这非常适合与模型相关的逻辑),并且可以像任何需要的类一样使用它。

// src/Model/SomeModelRelatedClass.php 

namespace App\Model; 

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

相关问题