2016-03-10 11:51:33 7051次浏览 4条回答 1 悬赏 10 金钱

我知道 yii\db\ActiveRecord 是继承的 yii\base\Model,

但是我想问的是我什么时候应该集成yii\db\ActiveRecord?什么时候继承 yii\base\Model?

比如我需要在项目里创建一个BaseModel的基类,那我的基类集成yii\db\ActiveRecord,然后所有的Model都集成我的基类,这样的话有的Model可能用不到ActiveRecord,但是也集成了,这样有什么坏处没?

还是我需要创建两个基类,一个基类集成Model,一个基类集成ActiveRecord?

求高手解答。

  • 回答于 2016-03-10 12:28 举报

    Active Record (活动记录,以下简称AR)提供了一个面向对象的接口, 用以访问数据库中的数据。一个 AR 类关联一张数据表, 每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。 一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。 您可以直接以面向对象的方式来操纵数据表中的数据

    Model 模型是 MVC 模式中的一部分, 是代表业务数据、规则和逻辑的对象。可通过继承 yii\base\Model 或它的子类定义模型类

    Model 类是高级模型Active Record活动记录的基类

    class ActiveRecord extends BaseActiveRecord{
    
    }
    

    然后:BaseActiveRecord继承Model

    abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
    {
    }
    

    所以说,ActiveRecord是Model的子类
    关于什么时候用,我说下我个人的理解:如果你需要跟数据库打交道,那你继承ActiveRecord,否则,你继承Model,当然,由于AR继承自Model,所以它同样也支持Model的数据输入、验证等特性。

    如果你看了官方提供的例子,你会发现,登录的时候,是有一个LoginForm的model,它就是直接继承Model的。而验证用户名密码则交给继承ActiveRecord的AR类。

    LoginForm只做验证,而不跟数据库打交道,而AR的实现类跟数据库打交道。。

    表达能力有限..... 其实你看看官方提供的例子,你大概知道什么时候继承ActiveRecord什么时候继承Model

  • 回答于 2016-03-10 17:40 举报

    回答的很详细,赞一个!

  • 回答于 2016-03-11 16:23 举报

    跟数据库有关才要继承activerecord,并不是所有的模型都一定是操作数据库的。

  • 回答于 2016-03-12 08:36 举报

    ActiveRecord 是继承自Model的,也就是说Model有的ActiveRecord 都有。

    简单理解,Model用于一些没有操作数据库的模型,比如表单。

    ActiveRecord 增加了一些操作数据库的方法,因此当要save update delete的时候 用这个很方便

您需要登录后才可以回答。登录 | 立即注册
llp
主管

llp

注册时间:2016-01-28
最后登录:2017-05-12
在线时长:10小时11分
  • 粉丝16
  • 金钱265
  • 威望20
  • 积分565

热门问题