实例以bagecms为例
文章表
01. CREATE TABLE `aps_post` ( 02. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 03. `user_id` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '用户', 04. `nickname` varchar(30) NOT NULL DEFAULT '' COMMENT '用户名', 05. `author` varchar(100) NOT NULL DEFAULT '' COMMENT '作者', 06. `title` varchar(255) NOT NULL COMMENT '标题', 07. `title_second` varchar(255) NOT NULL DEFAULT '' COMMENT '副标题', 08. `title_alias` char(50) NOT NULL DEFAULT '' COMMENT '别名 ', 09. `title_style` varchar(255) NOT NULL DEFAULT '' COMMENT '标题样式', 10. `title_style_serialize` varchar(255) NOT NULL DEFAULT '' COMMENT '标题样式序列化', 11. `html_path` varchar(100) NOT NULL DEFAULT '' COMMENT 'html路径', 12. `html_file` varchar(100) NOT NULL DEFAULT '' COMMENT 'html文件名', 13. `template` varchar(60) NOT NULL DEFAULT '' COMMENT '模板', 14. `catalog_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '分类', 15. `catalog_fid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '所属副栏目', 16. `special_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '专题编号', 17. `intro` text COMMENT '摘要', 18. `image_list` text COMMENT '组图', 19. `seo_title` varchar(255) NOT NULL DEFAULT '' COMMENT 'SEO标题', 20. `seo_description` text COMMENT 'SEO描述', 21. `seo_keywords` varchar(255) NOT NULL DEFAULT '' COMMENT 'SEO关键字', 22. `content` mediumtext NOT NULL COMMENT '内容', 23. `copy_from` varchar(100) NOT NULL DEFAULT '' COMMENT '来源', 24. `copy_url` varchar(255) NOT NULL DEFAULT '' COMMENT '来源url', 25. `redirect_url` varchar(255) NOT NULL DEFAULT '' COMMENT '跳转URL', 26. `tags` varchar(255) NOT NULL DEFAULT '' COMMENT 'tags', 27. `view_count` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '查看次数', 28. `commend` enum('Y','N') NOT NULL DEFAULT 'N' COMMENT '推荐', 29. `attach_status` enum('Y','N') NOT NULL DEFAULT 'N' COMMENT '是否上传附件', 30. `attach_file` varchar(255) NOT NULL DEFAULT '' COMMENT '附件名称', 31. `attach_thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '附件缩略图', 32. `favorite_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收藏数量', 33. `attention_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '关注次数', 34. `top_line` enum('Y','N') NOT NULL DEFAULT 'N' COMMENT '头条', 35. `last_update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后更新时间', 36. `reply_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '回复次数', 37. `reply_allow` enum('Y','N') NOT NULL DEFAULT 'Y' COMMENT '允许评论', 38. `sort_desc` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序', 39. `acl` varchar(100) NOT NULL DEFAULT 'Y' COMMENT '权限检测', 40. `status_is` enum('Y','N') NOT NULL DEFAULT 'Y' COMMENT '新闻状态', 41. `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '录入时间', 42. PRIMARY KEY (`id`) 43. ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='内容管理'
栏目表
01. CREATE TABLE `aps_catalog` ( 02. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 03. `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '上级分类', 04. `catalog_name` varchar(100) NOT NULL COMMENT '名称', 05. `catalog_name_second` varchar(100) DEFAULT '' COMMENT '副名称', 06. `catalog_name_alias` varchar(100) NOT NULL DEFAULT '' COMMENT '别名', 07. `content` text COMMENT '详细介绍', 08. `seo_title` varchar(100) NOT NULL DEFAULT '' COMMENT 'seo标题', 09. `seo_keywords` varchar(255) NOT NULL DEFAULT '' COMMENT 'seo关键字', 10. `seo_description` text COMMENT 'seo描述', 11. `attach_file` varchar(100) DEFAULT '' COMMENT '附件', 12. `attach_thumb` varchar(100) DEFAULT '' COMMENT '缩略图', 13. `sort_order` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序', 14. `data_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '数据量', 15. `page_size` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '每页显示数量', 16. `status_is` enum('Y','N') NOT NULL DEFAULT 'Y' COMMENT '状态', 17. `menu_is` enum('Y','N') DEFAULT 'N' COMMENT '是否导航显示', 18. `redirect_url` varchar(255) NOT NULL DEFAULT '' COMMENT '跳转地址', 19. `display_type` enum('page','list') NOT NULL DEFAULT 'list' COMMENT '显示方式', 20. `template_list` varchar(100) NOT NULL DEFAULT '' COMMENT '列表模板', 21. `template_page` varchar(100) NOT NULL DEFAULT '' COMMENT '单页模板', 22. `template_show` varchar(100) NOT NULL DEFAULT '' COMMENT '内容页模板', 23. `acl_browser` varchar(255) NOT NULL DEFAULT '' COMMENT '浏览权限', 24. `acl_operate` varchar(255) NOT NULL DEFAULT '' COMMENT '操作权限', 25. `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '录入时间', 26. PRIMARY KEY (`id`) 27. ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='全局分类'
//模型 models/post.php 1. return array( 2. 'catalog'=>array(self::BELONGS_TO, 'Catalog', 'catalog_id', 'alias'=>'catalog', 'select'=>'id,catalog_name'), 3. );
说明一下:
VarName: 是自定义的关系的名字
RelationType 指定关系类型,可以是一下四个常量之一: self::BELONGS_TO,self::HAS_ONE, self::HAS_MANY and self::MANY_MANY;
ClassName 是此 AR 类所关联的 AR 类的名字;
ForeignKey 指定关系中使用的外键(一个或多个)
额外的选项可以在每个关系的最后指定
//控制器下关联查询输出
1. $bagecmssearchList = Post::model()->findByPk(2); 2. var_dump($bagecmssearchList->catalog->catalog_name); string(12) "网站建设" 1. $bagecmssearchList = Post::model()->findAll(); 2. foreach ($bagecmssearchList as $v){ 3. var_dump($v->title.' -- '.$v->catalog->catalog_name); 4. }
string(31) "爱磐石,你好! -- 随笔"
string(72) "Yii 1.0数据库操作 查询、增加、更新、删除 -- 网站建设"
string(35) "yii下的事务处理 -- lnmp博文"
string(31) "赤裸的懿德 -- 珍藏段子"
继续我们的yii关联,先前“港”的都是群殴模式的多对一关联。此时此刻我们一块整整hero模式的一对多关联 用户表和文章表还是前面的,这边不再罗嗦了
<----admin模型----->
1. public function relations() 2. { 3. return array( 4. 'adminGroup'=>array(self::BELONGS_TO, 'AdminGroup', 'id', 'foreignKey'=>'group_id', 'alias'=>'group', 'select'=>'id,group_name'), 5. 'post'=>array(self::HAS_MANY,'Post','id','foreignKey'=>'user_id', 'select'=>'id,title,view_count'), 6. ); 7. }
<----控制器输出----->
1. $admin = Admin::model()->findByPk(1); 2. //$posts = $admin->post; //没有查询条件 3. $posts = $admin->post(array('condition'=>'view_count > 100')); 4. foreach ($posts as $p){ 5. var_dump($p->id.'--'.$p->title); 6. }
打印输出结果:
string(24) "1--爱磐石,你好!"
string(59) "2--Yii 1.0数据库操作 查询、增加、更新、删除"
string(18) "3--赤裸的懿德"
<----控制器输出----->
01. $data = Admin::model()->with(array( 02. 'post'=>array('condition'=>'view_count > 100') 03. ))->findAll(); 04. 05. $newArray = array(); 06. foreach ($data as $v){ 07. var_dump($v->username); 08. foreach ($v->post as $p){ 09. echo ' ---'.$p->title.'('.$p->view_count.') 10. '; 11. } 12. }
打印输出结果:
string(4) "jack"
---爱磐石,你好!(120)
---Yii 1.0数据库操作 查询、增加、更新、删除(130)
---赤裸的懿德(111)
sql日志如下:
01. system.db.CDbCommand.query(SHOW FULL COLUMNS FROM `aps_admin`) 02. system.db.CDbCommand.query(SHOW FULL COLUMNS FROM `aps_post`) 03. system.db.CDbCommand.query(SHOW CREATE TABLE `aps_admin`) 04. system.db.CDbCommand.query(SHOW CREATE TABLE `aps_post`) 05. system.db.CDbCommand.query(SELECT `t`.`id` AS `t0_c0`, `t`.`username` AS `t0_c1`, `t`.`password` AS `t0_c2`, `t`.`realname` AS `t0_c3`, 06. `t`.`group_id` AS `t0_c4`, `t`.`email` AS `t0_c5`, `t`.`qq` AS `t0_c6`, `t`.`notebook` AS `t0_c7`, `t`.`mobile` AS `t0_c8`, `t`.`telephone` AS `t0_c9`, 07. `t`.`last_login_ip` AS `t0_c10`, `t`.`last_login_time` AS `t0_c11`, `t`.`login_count` AS `t0_c12`, `t`.`status_is` AS `t0_c13`, 08. `t`.`create_time` AS `t0_c14`, `post`.`id` AS `t1_c0`, `post`.`title` AS `t1_c4`, `post`.`view_count` AS `t1_c25` 09. FROM `aps_admin` `t` 10. LEFT OUTER JOIN `aps_post` `post` 11. ON (`post`.`user_id`=`t`.`id`) WHERE (view_count > 100))
好了,先吃桶泡面。有问题讨论啊