这样的功能用不用得上spLinker(),如用得上如何用?[已解决]

#1 prince

想实现这样的效果:
未命名.jpg红圈里显示这个菜品的所有照片缩略图(这图由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