作为一名普通的开发人员/ IT人员,我过去几个月一直在为一家公司工作。我为本地托管的公司编写了一个Web应用程序。我使用CakePHP和MySQL(因为应用程序非常适合Active Record方案)。
我正在使用的新网络应用程序将用于分析每月销售数据。从本质上讲,我们每个月都会收到大量的信息,我需要分析......
每个月我们都会得到一个巨大的数据表,其中包含我们的每个客户信息(他们的ID#,他们处理了多少$$,我们取消了多少等等)。请拨打此残留
我们还得到另一个基本上有他们的ID,一个“描述”(基本上是费用类型)和一个值的表。拨打此INTERCHANGE
我有一个名为REPS的永久表,其中包含每个销售代表ID,其名称等。
为了获得有用的信息(比如客户端名称),我删除并重新上传另一个表,其中包含姓名,状态,状态(如果它们处于活动状态或已关闭状态)等信息...每月。
我决定制作一个残差表,将月份记录为一列,我每个月都会添加一个。
我的问题是使用CakePHP变得非常困难。假设我想获得一个表,每个月都有列和每个销售代表的行。它开始变得非常复杂,因为这不是 Active Record 应用程序,我不得不做各种各样的很复杂的发现陈述。
您是否建议更改为其他框架,语言或数据库?我应该对数据库结构进行哪些更改?我的控制器很长,我应该将更多的工作转移到模型吗?
有什么想法吗?
编辑:我需要创建一个系统,让我的非技术型老板可以轻松运行她想要的各种分析。
编辑#2 :感谢您的回复。是的,我非常了解SQL查询,实际上我只是开始做自己的事情,但之后我重新构建了数据库并在之后转换为Cake。
答案 0 :(得分:2)
这是一个非常开放的问题,因此你不会得到一个完美的答案。我只能投入我的两分钱,没有调整Cake的数据库重应用程序。我的意思是任何不仅仅是CRUD记录插入,检索,更新。 Cake DAL无法很好地扩展以适应复杂查询或大量数据插入/更新/操作。
话虽如此,CakePHP中仍有PHP。您可以使用模型的query
方法发出“手动”查询。您应该在模型中创建方法来执行大量数据提升;这样的代码是业务逻辑,不属于控制器。在模型中使用常规的PHP和SQL代码来处理数据。
如果这只是你的应用程序所做的唯一的事情,那么没有Cake就可能会更开心,只需要像PDO那样围绕你自己的数据库连接进行一些薄的包装。虽然放弃了Cake很好的路由,表单和视图,所以你必须决定你喜欢花时间做什么。
答案 1 :(得分:1)
首先检查您的选项。你知道其他任何框架吗?你知道怎么用你自己的MVC设置飞机Jane PHP应用程序吗?框架中的许多组件可以独立找到并添加到您自己的应用程序中(如Active Records,依赖注入,自动加载等)
如果您当前使用的框架使您难以完成任务,那么您应该考虑摆脱它。使用框架应该使事情变得更容易,而不是更难。关于CakePHP的问题在于它遵循“约定优于配置”的口号。虽然很快就可以立即将某种类型的新应用程序从地面上取下来,但它并不适合所有应用程序。
由于我对你的项目了解不多,我无法真正帮助你选择一个框架。但根据我过去的经验,Zend Frameowork和CodeIgniter一直是最灵活的。 ZF还提供了良好的CLI结构,以防您需要一直运行重型crons。话虽这么说,只有在你真的需要/想要一个框架时才使用它们。
拥有非常复杂的控制器并不是一件好事。这可能表明您的模型没有做足够的工作,并且大部分转换都发生在您的控制器中。您的模型和您的观点应该在工作中发挥更大的作用。我通常的目标是瘦控制器和脂肪模型。
答案 2 :(得分:0)
您是否考虑过其他框架?
例如,Symfony(我使用1.4。*)可以使用Propel作为其ORM。 Propel设计得非常好,并且它使用了一个Query对象,这使得从数据库中获取数据非常容易。如果您需要使用它,它还允许编写自定义SQL查询。
要回答你的问题,即使你专门询问Cake PHP,它听起来像是“这太多了”的论点;如“在这个项目中使用这样的框架太多了”。在我的情况下,我更喜欢使用我随身携带的plugins框架来部署每个项目,并投入时间进行真正的了解。它们节省了我的时间,我不需要考虑我开始的每个项目中的基本管道代码。
框架提供了很多工具(除了ORM之外),比如路由,验证等,几乎在任何项目中都非常方便,没有它们真的可以减慢你的速度。
如果您觉得CakePHP变得很麻烦,我建议您查看其他选项,因为我非常确定使用框架是正确的选择。
答案 3 :(得分:0)
我有一个好消息和坏消息。好消息是你从Active Record和CakePHP开始很好。坏消息是你的数据库结构不太好。
阅读一些关于Database Normalization的内容,了解如何规范化您的数据库和数据。
我看到的第一个问题是您每个月都会添加一列。你应该有两个不同的表:
最后,您将在代表和月份之间建立many-to-many关系。 ActiveRecord将非常高兴,MVC也是如此,以及与您合作或在您之后工作的开发人员,因为这是应该如何完成的:)