Yii中的sql查询的位置(或任何支持ORM的框架)?

对于使用MVC体系结构的项目,这是更多的编码风格问题。

我正在使用Yii框架开展一个项目。 每个数据库表都有它自己的模型类,可以让我充分利用Yii的活动记录。 凉。

但是现在我需要用一个复杂的逻辑和大量的表进行SQL查询。 最好和最快捷的方法是编写一个原始SQL,并将其放入一些getSomeComplexLogicData方法中。

问题是,我在哪里放这个方法? 将它放在一个我称之为控制器的地方是很好的做法(它不太可能会在其他地方重新使用),还是应该将它放在最适合的某个Model类中?


Yii的“模型”不需要扩展CActiveRecord

您可以创建一个简单的域对象,该对象包含代码中某些结构的业务逻辑,并为该结构提供单独的映射器,其中包含复杂的SQL查询。

你应该尽量避免在一个班级中集中所有,因为你最终会违反SRP,这是活动记录模式通常被认为是有害的主要原因之一(当然有一些例外)。 它倾向于将机器人域逻辑和存储逻辑整合到一个类中,因此很难进行测试和维护。


如果您使用的是正确的MVC或MVC设计模式,则不会有“模型”。 模型应该是一个层。 不是课堂或对象。 你不应该有任何域控制器业务逻辑暴露。


1)您可以将此方法放入组件/ Controller.php中,以便将此方法用于您的每个应用程序控制器。

2)最好的方法是制作一个你自己的组件。 你可以从控制器,模型,视图中调用你的组件。

Yii::app()->yourcomponentname->methodname

学习如何制作组件的链接:http://www.yiiframework.com/wiki/187/how-to-write-a-simple-application-component/

链接地址: http://www.djcxy.com/p/60843.html

上一篇: Where to put sql queries in Yii (or any framework with ORM support)?

下一篇: handle duplicates fields in psycopg2