请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 6255|回复: 0

[数据模型] 关联结果的条件限制

[复制链接]
发表于 2012-8-4 22:47:58 | 显示全部楼层 |阅读模式

在一对一关联的讲述中,我们曾经简单说明了对于关联搜索结果的一些限制,这里我们再来看一下这些条件限制功能。

对于关联结果的条件限制,有很多作用,下面是一部分的作用(但不局限于):

  • 搜索多个分类下的前10篇文章(limit,sort)
  • 搜索多个班级中,排名在5-10位的学生资料(condition,sort)
  • 显示多位用户最新的五个留言(sort,limit)
  • 显示多位用户最旧的十篇日志(sort,limit)
  • 在显示多个分类下的文章时,只返回文章的标题和ID号(field)
  • 搜索多班级中,随机10位考试分数在90分以上的女生的姓名(limit,sort,condition,field)
  • 搜索每个文章分类,并且附带每个分类下文章的总数(countonly)
  • 一表双关联,先得出每个分类总共有多少文章数量,然后再返回前十篇文章(countonly, limit ,sort)
  • 。。。

后面我们会一一来说明实现以上关联的linker应该怎么写,让我们先来学习一下,在关联linker中:

condition,对关联的附加条件

在关联结果中,condition的写法和find/findAll的参数$condition是一样的,可以是数组也可以是字符串格式。

countonly,在关联查找时是否只返回关联结果的记录数量,而并不返回全部结果。

countonly取值TRUE/FALSE。

sort,返回关联结果的排序

格式和find/findAll一样,默认是主键正序。

field,返回关联结果的限定字段

格式和find/findAll一样,默认是*,即返回全部字段

limit,返回关联结果的数量

格式和find/findAll一样,默认是全部。

从以上的说明可以看出,在关联linker内,参数和findAll是大同小异的,所以我们可以借助这些参数,来“实现”在关联表中“findAll”。


以下的例子中,我们主要是关注linker内的上面几个参数的设置方法,不需要太在意其他的参数
搜索多个分类下的前10篇文章(limit,sort)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'articles',
  5.                         'mapkey' => 'type_id',
  6.                         'fclass' => 'm_article',
  7.                         'fkey' => 'type_id',
  8.                         'limit' => '10',
  9.                         'sort' => 'articleid DESC',
  10.                         'enabled' => true,
  11.                 ),
  12.                 array(
  13.                         ...
  14.                 )
  15. );
复制代码
搜索多个班级中,排名在5-10位的学生资料(condition,sort)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'students',
  5.                         'mapkey' => 'class_id',
  6.                         'fclass' => 'm_student',
  7.                         'fkey' => 'class_id',
  8.                         'sort' => 'paiming ASC',
  9.                         'condition' => 'paiming >= 5 AND paiming <= 10',
  10.                         'enabled' => true,
  11.                 ),
  12.                 array(
  13.                         ...
  14.                 )
  15. );
复制代码
显示多位用户最新的五个留言(sort,limit)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'theguestbooke',
  5.                         'mapkey' => 'user_id',
  6.                         'fclass' => 'm_guestbook',
  7.                         'fkey' => 'user_id',
  8.                         'sort' => 'post_time DESC',
  9.                         'limit' => '5',
  10.                         'enabled' => true,
  11.                 ),
  12.                 array(
  13.                         ...
  14.                 )
  15. );
复制代码
显示多位用户最旧的十篇日志(sort,limit)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'bloglink',
  5.                         'mapkey' => 'user_id',
  6.                         'fclass' => 'm_blog',
  7.                         'fkey' => 'user_id',
  8.                         'sort' => 'post_time ASC',
  9.                         'limit' => '10',
  10.                         'enabled' => true,
  11.                 ),
  12.                 array(
  13.                         ...
  14.                 )
  15. );
复制代码
在显示多个分类下的文章时,只返回文章的标题和ID号(field)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'articles',
  5.                         'mapkey' => 'type_id',
  6.                         'fclass' => 'm_article',
  7.                         'fkey' => 'type_id',
  8.                         'field' => 'title, articleid',
  9.                         'enabled' => true,
  10.                 ),
  11.                 array(
  12.                         ...
  13.                 )
  14. );
复制代码
搜索多班级中,随机10位考试分数在90分以上的女生的姓名(limit,sort,condition,field)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'students',
  5.                         'mapkey' => 'class_id',
  6.                         'fclass' => 'm_student',
  7.                         'fkey' => 'class_id',
  8.                         'sort' => 'Rand()', // 等于order by Rand(),mysql中是通过order by rand()来获取随机记录的
  9.                         'condition' => 'sex = "female"',
  10.                         'field' => 'name, sex, class_id', // 因为条件中有性别,所以field中务必要带上sex字段,还有主键也是必须的
  11.                         'limit' => '10',
  12.                         'enabled' => true,
  13.                 ),
  14.                 array(
  15.                         ...
  16.                 )
  17. );
复制代码
搜索每个文章分类,并且附带每个分类下文章的总数(countonly)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'articlecounter',
  5.                         'mapkey' => 'type_id',
  6.                         'fclass' => 'm_article',
  7.                         'fkey' => 'type_id',
  8.                         'countonly' => true,
  9.                         'enabled' => true,
  10.                 ),
  11.                 array(
  12.                         ...
  13.                 )
  14. );
复制代码
一表双关联,先得出每个分类总共有多少文章数量,然后再返回前十篇文章(countonly, limit ,sort)
  1. var $linker = array(
  2.                 array(
  3.                         'type' => 'hasmany',
  4.                         'map' => 'articles',
  5.                         'mapkey' => 'type_id',
  6.                         'fclass' => 'm_article',
  7.                         'fkey' => 'type_id',
  8.                         'limit' => '10',
  9.                         'sort' => 'articleid DESC',
  10.                         'enabled' => true,
  11.                 ),
  12.                 array(
  13.                         'type' => 'hasmany',
  14.                         'map' => 'articlecounter',
  15.                         'mapkey' => 'type_id',
  16.                         'fclass' => 'm_article',
  17.                         'fkey' => 'type_id',
  18.                         'countonly' => true,
  19.                         'enabled' => true,
  20.                 ),
  21. );
复制代码
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-2-21 07:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表