#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内的上面几个参数的设置方法,不需要太在意其他的参数
var $linker = array(搜索多个班级中,排名在5-10位的学生资料(condition,sort)
array(
'type' => 'hasmany',
'map' => 'articles',
'mapkey' => 'type_id',
'fclass' => 'm_article',
'fkey' => 'type_id',
'limit' => '10',
'sort' => 'articleid DESC',
'enabled' => true,
),
array(
...
)
);
var $linker = array(显示多位用户最新的五个留言(sort,limit)
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(
...
)
);
var $linker = array(显示多位用户最旧的十篇日志(sort,limit)
array(
'type' => 'hasmany',
'map' => 'theguestbooke',
'mapkey' => 'user_id',
'fclass' => 'm_guestbook',
'fkey' => 'user_id',
'sort' => 'post_time DESC',
'limit' => '5',
'enabled' => true,
),
array(
...
)
);
var $linker = array(在显示多个分类下的文章时,只返回文章的标题和ID号(field)
array(
'type' => 'hasmany',
'map' => 'bloglink',
'mapkey' => 'user_id',
'fclass' => 'm_blog',
'fkey' => 'user_id',
'sort' => 'post_time ASC',
'limit' => '10',
'enabled' => true,
),
array(
...
)
);
var $linker = array(搜索多班级中,随机10位考试分数在90分以上的女生的姓名(limit,sort,condition,field)
array(
'type' => 'hasmany',
'map' => 'articles',
'mapkey' => 'type_id',
'fclass' => 'm_article',
'fkey' => 'type_id',
'field' => 'title, articleid',
'enabled' => true,
),
array(
...
)
);
var $linker = array(搜索每个文章分类,并且附带每个分类下文章的总数(countonly)
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(
...
)
);
var $linker = array(一表双关联,先得出每个分类总共有多少文章数量,然后再返回前十篇文章(countonly, limit ,sort)
array(
'type' => 'hasmany',
'map' => 'articlecounter',
'mapkey' => 'type_id',
'fclass' => 'm_article',
'fkey' => 'type_id',
'countonly' => true,
'enabled' => true,
),
array(
...
)
);
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