現需要通過訂單表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 指定關系中使用的外鍵(一個或多個)。額外的選項可以在每個關系的最后指定。
<?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'), ); }}
<?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編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答