国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

Yii學(xué)習(xí)二:關(guān)聯(lián)查詢

2020-03-22 18:37:31
字體:
供稿:網(wǎng)友
  • 現(xiàn)需要通過訂單表order_id查詢到訂單商品表中的商品名goods_name(訂單表order_info和訂單商品表order_goods通過order_id關(guān)聯(lián))

    在OrderInfo.php模型中建立一個(gè)relations方法,

    AR 中定義關(guān)系需要覆蓋 [CActiveRecord] 中的 [relations()|CActiveRecord::relations] 方法。此方法返回一個(gè)關(guān)系配置數(shù)組。每個(gè)數(shù)組元素通過如下格式表示一個(gè)單一的關(guān)系。

    1. 復(fù)制代碼'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)

    其中 VarName 是關(guān)系的名字;

    RelationType 指定關(guān)系類型,可以是一下四個(gè)常量之一: self::BELONGS_TO, self::HAS_ONE,self::HAS_MANY and self::MANY_MANY;

    ClassName 是此 AR 類所關(guān)聯(lián)的 AR 類的名字;

    ForeignKey 指定關(guān)系中使用的外鍵(一個(gè)或多個(gè))。額外的選項(xiàng)可以在每個(gè)關(guān)系的最后指定。

    <?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);	}	}

    在控制器中實(shí)現(xiàn)關(guān)聯(lián)查詢

    <?phpclass OrderInfoController extends CController{	public function actionRead()	{		header("Content-Type:text/html;charset=utf-8;");		$m = OrderInfo::model()->findByPk(229);		var_dump($m->goods);	}}

    擴(kuò)展:

    數(shù)據(jù)庫的角度來說,表 A 和 B 之間有三種關(guān)系:

    一對(duì)多(one-to-many,例如 tbl_user 和 tbl_post),

    一對(duì)一( one-to-one 例如 tbl_user 和 tbl_profile),

    多對(duì)多(many-to-many 例如 tbl_category 和 tbl_post)。

    在 AR 中,有四種關(guān)系:

    BELONGS_TO(屬于): 如果表 A 和 B 之間的關(guān)系是一對(duì)多,則 表 B 屬于 表 A (例如 Post 屬于 User);

    HAS_MANY(有多個(gè)): 如果表 A 和 B 之間的關(guān)系是一對(duì)多,則 A 有多個(gè) B (例如 User 有多個(gè) Post);

    HAS_ONE(有一個(gè)): 這是 HAS_MANY 的一個(gè)特例,A 最多有一個(gè) B (例如 User 最多有一個(gè) Profile);

    MANY_MANY: 這個(gè)對(duì)應(yīng)于數(shù)據(jù)庫中的 多對(duì)多 關(guān)系。 由于多數(shù) DBMS 不直接支持 多對(duì)多 關(guān)系,因此需要有一個(gè)關(guān)聯(lián)表將 多對(duì)多 關(guān)系分割為 一對(duì)多 關(guān)系。 在我們的示例數(shù)據(jù)結(jié)構(gòu)中,tbl_post_category 就是用于此目的的。在 AR 術(shù)語中,我們可以解釋MANY_MANY 為 BELONGS_TO 和 HAS_MANY 的組合。 例如,Post 屬于多個(gè)(belongs to many) Category ,Category 有多個(gè)(has many) Post.

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 张家港市| 白玉县| 来宾市| 临海市| 吐鲁番市| 上虞市| 娄烦县| 夏河县| 特克斯县| 新蔡县| 遂溪县| 赤城县| 张掖市| 吴旗县| 齐河县| 汪清县| 车险| 宝兴县| 拜泉县| 招远市| 洪洞县| 茶陵县| 九江市| 镇远县| 绥德县| 龙川县| 中宁县| 望都县| 绥江县| 垫江县| 九龙县| 渑池县| 黄骅市| 平武县| 宁晋县| 巫山县| 府谷县| 三亚市| 京山县| 亳州市| 徐闻县|