这样的功能用不用得上spLinker(),如用得上如何用?[已解决]
发布于:2022-01-17 09:50:54
#1 prince
想实现这样的效果:

红圈里显示这个菜品的所有照片缩略图(这图由cplist_album存储,点击可以浏览这个菜品的所有照片)
有两个表
cplist: //菜品列表
cp_id smallint(5) 主键 唯一 //产品id
accouts smallint(5) //所属用户名
cp_name varchar(20) //菜品名字
这个表的Model:
class cpList extends spModel
{
var $pk="cp_id";//主键
var $table="cpList";//表名
var $linker = array(
array(
'type' => 'hasone',//hasone为一对一关联
'map' => 'album',//关联标识
'mapkey' => 'cp_id',//本表与对应表关联的字段名
'fclass' => 'cpList_album',//对应表的spModel类名
'fkey' => 'cp_id',//对应表中关联的字段名
'enable' => true //启用关联
)
);
}
cplist_album: //菜品相册
pic_id smallint(5) 主键 唯一 //照片id
cp_id //所属菜品id
picture //照片
这个表的model:
class cpList_album extends spModel
{
var $pk="pic_id";//相册表的主键
var $table="cpList_album";//表名
}
控制器里这样写:
$this -> results = $cpList -> spPager($this -> spArgs('page', 1), 10) -> spLinker() -> findAll($conditions);
//但是dump()出来显示并没有cplist_album表的内容,哪里写错了?
2010-08-27 21:18:20
#2 jake
一般而言,spLinker和spPager连用,是 $g->spLinker()->spPager()->findAll()
注意两个的顺序。
2010-08-27 22:22:09
#3 prince
我这个列表是先用accouts(账号)查出所有属于这个用户的菜品,然后再从cplist_album里读出所有属于这个菜品的照片,那么这样的话"cplist"这个表是不是就是一个中间表,那就是多对多关联了?
2010-08-28 16:13:46
#4 prince
解决了,是我自己的原因,一是关系搞错了,
这关系应该是一对多的关系(一条记录对应另外一个表多条记录,之前我理解为一个表对应多个表。):
有两个表
cplist: //菜品列表
cp_id smallint(5) 主键 唯一 //产品id
accouts smallint(5) //所属用户名
cp_name varchar(20) //菜品名字
这个表的Model:
class cpList extends spModel
{
var $pk="cp_id";//主键
var $table="cpList";//表名
var $linker = array(
array(
'type' => 'hasmany',//hasmany为一对多关联
'map' => 'cpList_album',//关联标识
'mapkey' => 'cp_id',//本表与对应表关联的字段名
'fclass' => 'cpList_album',//对应表的spModel类名
'fkey' => 'cp_id',//对应表中关联的字段名
'enabled' => true //启用关联
)
);
}
cplist_album: //菜品相册
pic_id smallint(5) 主键 唯一 //照片id
cp_id //所属菜品id
picture //照片
这个表的model:
class cpList_album extends spModel
{
var $pk="pic_id";//相册表的主键
var $table="cpList_album";//表名
}
控制器里这样写:
$this -> results = $cpList -> spLinker() -> findAll($conditions);
//这样结果出来了,之前是因为搞错关系,而且有一个低级错误:enabled这名字少打了个字母d,对不住各位了:$
2010-08-28 17:04:32