码迷,mamicode.com
首页 > 其他好文 > 详细

Yii 学习二:关联查询

时间:2014-11-30 16:56:17      阅读:141      评论:0      收藏:0      [点我收藏+]

标签: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] 方法。此方法返回一个关系配置数组。每个数组元素通过如下格式表示一个单一的关系。

  1. 复制代码‘VarName‘=>array(‘RelationType‘, ‘ClassName‘, ‘ForeignKey‘, ...additional options)

其中 VarName 是关系的名字;

RelationType 指定关系类型,可以是一下四个常量之一: self::BELONGS_TOself::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'),
		);
	}

}

order_goods模型

<?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.

Yii 学习二:关联查询

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://blog.csdn.net/szy361/article/details/41623763

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!