#1 jake

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

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


  • 搜索多个分类下的前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)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'articles',
                        'mapkey' => 'type_id',
                        'fclass' => 'm_article',
                        'fkey' => 'type_id',
                        'limit' => '10',
                        'sort' => 'articleid DESC',
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
搜索多个班级中,排名在5-10位的学生资料(condition,sort)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'students',
                        'mapkey' => 'class_id',
                        'fclass' => 'm_student',
                        'fkey' => 'class_id',
                        'sort' => 'paiming ASC',
                        'condition' => 'paiming >= 5 AND paiming <= 10',
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
显示多位用户最新的五个留言(sort,limit)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'theguestbooke',
                        'mapkey' => 'user_id',
                        'fclass' => 'm_guestbook',
                        'fkey' => 'user_id',
                        'sort' => 'post_time DESC',
                        'limit' => '5',
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
显示多位用户最旧的十篇日志(sort,limit)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'bloglink',
                        'mapkey' => 'user_id',
                        'fclass' => 'm_blog',
                        'fkey' => 'user_id',
                        'sort' => 'post_time ASC',
                        'limit' => '10',
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
在显示多个分类下的文章时,只返回文章的标题和ID号(field)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'articles',
                        'mapkey' => 'type_id',
                        'fclass' => 'm_article',
                        'fkey' => 'type_id',
                        'field' => 'title, articleid',
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
搜索多班级中,随机10位考试分数在90分以上的女生的姓名(limit,sort,condition,field)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'students',
                        'mapkey' => 'class_id',
                        'fclass' => 'm_student',
                        'fkey' => 'class_id',
                        'sort' => 'Rand()', // 等于order by Rand(),mysql中是通过order by rand()来获取随机记录的
                        'condition' => 'sex = "female"',
                        'field' => 'name, sex, class_id', // 因为条件中有性别,所以field中务必要带上sex字段,还有主键也是必须的
                        'limit' => '10',
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
搜索每个文章分类,并且附带每个分类下文章的总数(countonly)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'articlecounter',
                        'mapkey' => 'type_id',
                        'fclass' => 'm_article',
                        'fkey' => 'type_id',
                        'countonly' => true,
                        'enabled' => true,
                ),
                array(
                        ...
                )
);
一表双关联,先得出每个分类总共有多少文章数量,然后再返回前十篇文章(countonly, limit ,sort)
 var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'articles',
                        'mapkey' => 'type_id',
                        'fclass' => 'm_article',
                        'fkey' => 'type_id',
                        'limit' => '10',
                        'sort' => 'articleid DESC',
                        'enabled' => true,
                ),
                array(
                        'type' => 'hasmany',
                        'map' => 'articlecounter',
                        'mapkey' => 'type_id',
                        'fclass' => 'm_article',
                        'fkey' => 'type_id',
                        'countonly' => true,
                        'enabled' => true,
                ),
);

2012-08-04 22:47:58