Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php yii中的CModel子类_Php_Yii - Fatal编程技术网

Php yii中的CModel子类

Php yii中的CModel子类,php,yii,Php,Yii,我是一个4天大的易迷,我非常喜欢它 我有一个特殊的数据库表,不能由CActiveRecord直接使用。我的解决方案是将CModel子类化,以拥有自己的逻辑来列出、创建、保存和删除记录。我的新CModel子类不能实例化;似乎CModel需要定义更多的方法来允许从中创建实例 我的问题是:这是正确的方法还是有更好的方法?如果是,为使我的新类完整,需要定义哪些缺少的方法;不抽象 谢谢我通常创建自己的类来处理我正在构建的webapp的所谓“逻辑” 我将它放在另一个文件夹(通常是logics文件夹)中,并从

我是一个4天大的易迷,我非常喜欢它

我有一个特殊的数据库表,不能由CActiveRecord直接使用。我的解决方案是将CModel子类化,以拥有自己的逻辑来列出、创建、保存和删除记录。我的新CModel子类不能实例化;似乎CModel需要定义更多的方法来允许从中创建实例

我的问题是:这是正确的方法还是有更好的方法?如果是,为使我的新类完整,需要定义哪些缺少的方法;不抽象


谢谢

我通常创建自己的类来处理我正在构建的webapp的所谓“逻辑”

我将它放在另一个文件夹(通常是logics文件夹)中,并从配置文件自动导入目录。逻辑类不从任何模型中生成子类

public class ProfitLogic { ... }
在类中,我实现了实例化和使用我需要的任何ActiveRecord的函数


其原因是,在进行原型设计时,我经常会优化我的数据库设计,并且我需要再次重新生成ActiveRecords:p

我通常创建自己的类来处理我正在构建的webapp的所谓“逻辑”

我将它放在另一个文件夹(通常是logics文件夹)中,并从配置文件自动导入目录。逻辑类不从任何模型中生成子类

public class ProfitLogic { ... }
在类中,我实现了实例化和使用我需要的任何ActiveRecord的函数


这样做的原因是,在原型设计时,我经常优化我的数据库设计,并且我需要再次重新生成ActiveRecords:p

一般来说,您的方法很好,即使您没有“被迫”采用它,也会很好。我使用
CActiveRecord
子类作为模型的基础,以提供额外的自定义功能

至于您的另一个问题,您只需要实现
attributeNames()
就可以实例化类的对象


但是,为什么不直接将
CActiveRecord
子类化,而不是
CModel
?您仍然可以覆盖选择的任何和所有方法。您的数据库是否与通常的模式有如此显著的不同,以致于您无法重用任何逻辑?

总体而言,您的方法很好,即使您没有“被迫”采用它,也会很好。我使用
CActiveRecord
子类作为模型的基础,以提供额外的自定义功能

至于您的另一个问题,您只需要实现
attributeNames()
就可以实例化类的对象


但是,为什么不直接将
CActiveRecord
子类化,而不是
CModel
?您仍然可以覆盖选择的任何和所有方法。您的数据库是否与通常的模式有如此显著的不同,以至于您无法重用任何逻辑?

我对Yii也相当陌生,但我发现扩展CForm(如默认的ContactForm模型)非常有用


这不是拥有大量繁重业务逻辑的最佳选择,但它涉及到您突破典型工作流的要点。

我对Yii也相当陌生,但我发现扩展CForm(如默认的ContactForm模型)可能很有用


这不是拥有大量繁重业务逻辑的最佳选择,但它涉及到您突破典型工作流程的要点。

谢谢您的回答。。。我可以(最终)从源代码中认识到AttributeName是yii中唯一的虚拟方法。我只是不喜欢使用CActiveRecord,因为它不会给我带来任何额外的好处,因为我的(虚拟)记录存储了许多记录,而不是一个属性:值表感谢您的回答。。。我可以(最终)从源代码中认识到AttributeName是yii中唯一的虚拟方法。我只是不喜欢使用CActiveRecord,因为它不会给我带来任何额外的好处,因为我的(虚拟)记录存储了许多记录,而不是一个属性:值表中的记录