首页 > 编程 > PHP > 正文

Yii学习二:关联查询

2020-03-22 18:37:31
字体:
来源:转载
供稿:网友
  • 现需要通过订单表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_TO, self::HAS_ONE,self::HAS_MANY and self::MANY_MANY;

    ClassName 是此 AR 类所关联的 AR 类的名字;

    ForeignKey 指定关系中使用的外键(一个或多个)。额外的选项可以在每个关系的最后指定。

    <?phphtml' target='_blank'>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模型

    <?phpclass OrderGoods extends CActiveRecord{	public function tableName()	{		return "{{order_goods}}";	}		public static function model($className = __CLASS__)	{		return parent::model($className);	}	}

    在控制器中实现关联查询

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

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表