Yii model有继承功能吗?

在JAVA的hibernate中,父类和子类使用同一个table,table中使用一个字段来区分各类。用户在操作过程中不感觉到父类和子类共用同一个table。整个操作过程中hibernate会自动匹配相关数据,很有面向对象感觉。不知道Yii有类似的功能吗?

java的代码如下:

@Entity

@Table(name = "_core_type")

@DiscriminatorColumn(name = "subclass", discriminatorType = DiscriminatorType.STRING)

@DiscriminatorValue("Type")

public class Type {

@Id


@GeneratedValue


private Long id;

}

//----子类----------------------

@Entity

@DiscriminatorValue ("TypeMessage")

public class TypeMessage extends Type{

public TypeMessage(){


}

}

Yii里没有直接提供这个支持,因为table的继承有好几种方法,这个只是其中一种(也是被RoR采用的)。实现这种继承方法很简单,你只要override CActiveRecord::instantiate()就可以了。在这个函数里,你可以根据特定的字段来创建相应的AR实例。

谢谢qiang。但还有些不明白。

父类:Type 子类:TypeAnnual 和 TypeArea 他们同用一个table。数据区别在于subclass的标示不一样。

父类override了instantiate

	protected function instantiate($attributes){


		if($attributes['subclass']==('TypeAnnual')){


			return new TypeAnnual(null);


		}else if($attributes['subclass']==('TypeArea')){


			return new TypeArea(null);


		}else{


			return new $class(null);


		}


	}


但TypeAnnual::mode->findAll()和TypeArea::mode->findAll()在哪里设定返回各自的数据。也就是想问TypeAnnual的CRUD怎样保证是操作自己的数据。特别是R操作中,自动匹配自己的数据。

你是指TypeAnnual的findAll()希望返回的仅仅是TypeAnnual的数据,不要有TypeArea?

这的确是个问题,尽管通过设置查询条件可以解决。

你创建一个ticket吧,我看看能否提供更好的支持。

Quote

在JAVA的hibernate中,父类和子类使用同一个table,table中使用一个字段来区分各类。用户在操作过程中不感觉到父类和子类共用同一个table。整个操作过程中hibernate会自动匹配相关数据,很有面向对象感觉。不知道Yii有类似的功能吗?

java的代码如下:

@Entity

@Table(name = "_core_type")

@DiscriminatorColumn(name = "subclass", discriminatorType = DiscriminatorType.STRING)

@DiscriminatorValue("Type")

public class Type {

@Id





@GeneratedValue





private Long id;

}

//----子类----------------------

@Entity

@DiscriminatorValue ("TypeMessage")

public class TypeMessage extends Type{

public TypeMessage(){





}

}