Zend_Db_Table Relationships 关联查询实战(一)
来源:互联网 发布:2016淘宝冷门暴力行业 编辑:程序博客网 时间:2024/06/05 03:01
我们通过四个数据表articles(文章表),categories(分类表),tags(标签表),articles_tags(文章_标签对应表)
来学习使用Zend_Db_Table Relationships关联查询
以下是创建这四个表的SQL语句:
来学习使用Zend_Db_Table Relationships关联查询
以下是创建这四个表的SQL语句:
复制内容到剪贴板
PHP代码:
-- ------------------------------------------------------------ 表的结构 `articles`--CREATE TABLE IF NOT EXISTS `articles` ( `id` int(10) unsigned NOT NULL auto_increment, `cat_id` tinyint(3) unsigned NOT NULL default '1', `title` varchar(100) NOT NULL, PRIMARY KEY (`id`), KEY `title` (`title`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;-- ------------------------------------------------------------ 表的结构 `articles_tags`--CREATE TABLE IF NOT EXISTS `articles_tags` ( `article_id` int(10) unsigned NOT NULL, `tag_id` int(10) unsigned NOT NULL, PRIMARY KEY (`article_id`,`tag_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ------------------------------------------------------------ 表的结构 `categories`--CREATE TABLE IF NOT EXISTS `categories` ( `cat_id` tinyint(3) unsigned NOT NULL auto_increment, `parent_id` tinyint(3) unsigned NOT NULL default '0', `name` varchar(50) NOT NULL, PRIMARY KEY (`cat_id`), KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;-- ------------------------------------------------------------ 表的结构 `tags`--CREATE TABLE IF NOT EXISTS `tags` ( `tag_id` int(10) unsigned NOT NULL auto_increment, `name` varchar(100) NOT NULL, PRIMARY KEY (`tag_id`), KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
同时我们在文章表和分类表中插入一些测试数据
复制内容到剪贴板
PHP代码:
INSERT INTO `categories` (`cat_id`, `parent_id`, `name`) VALUES(1, 0, '分类一'),(2, 0, '分类二');INSERT INTO `articles` (`id`, `cat_id`, `title`) VALUES(1, 1, '这是一篇属于分类一的文章'),(2, 1, '这是一篇属于分类一的文章'),(3, 2, '这是一篇属于分类二的文章'),(4, 2, '这是一篇属于分类二的文章');
下面分别定义文章模型文件(Article.php)和分类模型文件(Category.php):
models/Article.php
复制内容到剪贴板
PHP代码:
class Article extends Zend_Db_Table { protected $_name = 'articles'; protected $_primary = 'id';}
models/Category.php
复制内容到剪贴板
PHP代码:
class Category extends Zend_Db_Table { protected $_name = 'categories'; protected $_primary = 'cat_id';}
我们通过Zend_Db_Table的$_referenceMap属性来定义数据表的关联关系
models/Article.php
复制内容到剪贴板
PHP代码:
class Article extends Zend_Db_Table { protected $_name = 'articles'; protected $_primary = 'id'; protected $_referenceMap = array( 'category' => array( //关联名称 'columns' => 'cat_id', 'refTableClass' => 'Category', 'refColumns' => 'cat_id', ), );}
$_referenceMap 的相关属性说明:
columns:指定当前数据表通过那个字段和外表关联,一般指外键(PK)
refTableClass:关联表所对应的类名称
refColumns:关联表使用那个字段和其它表关联,一般指主键(FK)
现在我们已经将文章数据表和分类数据表关联起来了,下面我们看来如何在查询某一篇文章的同时查询出相关的分类信息,
修改modles/Article.php,添加下面方法:
复制内容到剪贴板
PHP代码:
public function getById($id){ $where = $this -> select() -> where('id = ?', $id); $article = $this -> fetchRow($where); $select = $this-> select() -> from('categories', array('name')); $category = $article -> findParentRow('Category', null, $select) -> toArray(); $row = $article -> toArray(); $row['category'] = $category; return $row;}
然后在任意controller里,比如IndexController.php里
复制内容到剪贴板
PHP代码:
class IndexController extends Zend_Controller_Action { public function init() { } public function indexAction() { $modelArticle = new Article(); $article = $modelArticle -> getById(3); Zend_Debug::dump($article); } }
运行程序结果
复制内容到剪贴板
PHP代码:
array(4) { ["id"] => string(1) "3" ["cat_id"] => string(1) "2" ["title"] => string(24) "这是一篇属于分类二的文章" ["category"] => array(1) { ["name"] => string(6) "分类二" }}
- Zend_Db_Table Relationships 关联查询实战(一)
- Zend_Db_Table Relationships 关联查询实战(二)
- 【小结】初学Zend_Db_Table Relationships
- Zend_Db_Table Relationships 用法
- Zend_Db_Table Relationships 翻译和注释
- Zend_Db_Table 表关联
- Zend_DB_Table
- Zend_Db_Table
- zend_Db_Table
- MyBatis 实战-使用 maven 构建(4)-实现关联查询
- 机器学习实战(一):Apriori算法实现关联分析
- EF中的外键以及关联(Foreign Keys and Relationships (Associations))
- 文本查询程序(关联容器使用)一
- Zend_Db_Table的其他操作(删除、修改、sql语句查询)
- 10--MySQL数据查询应用(实战)(一)
- MyBatis之多对一关联查询
- mybatis实战教程之四:实现关联数据的查询
- 从一关联到多的查询和从多关联到一的查询来简单说说关联查询
- android反编译工具apktool介绍(反编译xml的工具)(转载)
- Redis VS Memcached
- 程序=算法+数据结构
- 新浪微博移动客户端更新至3.0:引入电商模式
- JadEclipse工具的使用
- Zend_Db_Table Relationships 关联查询实战(一)
- Zend_Db_Table Relationships 关联查询实战(二)
- CentOS 安装apache、mysql、php
- NUnit配置问题
- jQuery基础之四 -- 事件
- Struts2.1.8版本后的Property标签,在源文件中显示为unicode解决办法
- 增大Zen Cart数据字段
- mysql存储过程语法
- 配置文件读取工具类v1.0