标签:style blog http io ar color os 使用 sp
现需要通过订单表order_id查询到订单商品表中的商品名goods_name(订单表order_info和订单商品表order_goods通过order_id关联)
在OrderInfo.php模型中建立一个relations方法,
AR 中定义关系需要覆盖 [CActiveRecord] 中的 [relations()|CActiveRecord::relations] 方法。此方法返回一个关系配置数组。每个数组元素通过如下格式表示一个单一的关系。
- 复制代码‘VarName‘=>array(‘RelationType‘, ‘ClassName‘, ‘ForeignKey‘, ...additional options)
其中 VarName
是关系的名字;
RelationType
指定关系类型,可以是一下四个常量之一: self::BELONGS_TO
, self::HAS_ONE
,self::HAS_MANY
and self::MANY_MANY
;
ClassName
是此 AR 类所关联的 AR 类的名字;
ForeignKey
指定关系中使用的外键(一个或多个)。额外的选项可以在每个关系的最后指定。
<?php class OrderInfo extends CActiveRecord { public function tableName() { return "{{order_info}}"; } public static function model($className = __CLASS__) { return parent::model($className); } public function relations() { return array( "goods" => array(self::BELONGS_TO,'OrderGoods','order_id'), ); } }
<?php class OrderGoods extends CActiveRecord { public function tableName() { return "{{order_goods}}"; } public static function model($className = __CLASS__) { return parent::model($className); } }
<?php class OrderInfoController extends CController { public function actionRead() { header("Content-Type:text/html;charset=utf-8;"); $m = OrderInfo::model()->findByPk(229); var_dump($m->goods); } }
从数据库的角度来说,表 A 和 B 之间有三种关系:
一对多(one-to-many,例如 tbl_user
和 tbl_post
),
一对一( one-to-one 例如 tbl_user
和 tbl_profile
),
多对多(many-to-many 例如 tbl_category
和 tbl_post
)。
在 AR 中,有四种关系:
BELONGS_TO
(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B
属于 表 A (例如 Post
属于 User
);
HAS_MANY
(有多个): 如果表 A 和 B 之间的关系是一对多,则 A 有多个
B (例如 User
有多个 Post
);
HAS_ONE
(有一个): 这是 HAS_MANY
的一个特例,A
最多有一个 B (例如 User
最多有一个 Profile
);
MANY_MANY
: 这个对应于数据库中的 多对多 关系。 由于多数 DBMS 不直接支持
多对多 关系,因此需要有一个关联表将 多对多 关系分割为 一对多 关系。 在我们的示例数据结构中,tbl_post_category
就是用于此目的的。在 AR 术语中,我们可以解释MANY_MANY
为 BELONGS_TO
和 HAS_MANY
的组合。
例如,Post
属于多个(belongs to many) Category
,Category
有多个(has
many) Post
.
标签:style blog http io ar color os 使用 sp
原文地址:http://blog.csdn.net/szy361/article/details/41623763