【求助】关于一对多关联的问题!

#1 cody

我guestbook,和user的结构如下
gb.jpguser.jpg
我想用name做为"对应表中关联的字段名"来增加guestbook中的'name'代码如下,但每次guestbook中增加的name字段内容都是user中的'id'
class user extends spModel{
public $pk = 'id';
public $table = 'user';
var $linker = array(
array(
'type'=>'hasmany',
'map'=>'gb',
'mapkey'=>'name',
'fclass'=>'guestbook',
'fkey'=>'name',
'enabled'=>true
),
);
}
?>

haha.jpgfff.jpg

2010-11-05 23:37:32

#2 cygsd

用name字段作为关联字段,本身就不科学,不利于数据的完整性和一致性。
另外,你应该也建立了如下类:
class guestbook extends spModel{
public $pk = 'id';
public $table = 'guestbook';}

这个类是不是与你建立的一对多关联有冲突。
再者,两个表中的字段name长度不一样,也可能是个问题。

2010-11-06 15:55:33

#3 cygsd

题外话:用了很长时间sp,总是不习惯Linker这种关联操作,不太好控制。关联查询我一般用findSql()。

2010-11-06 15:59:56

#4 cody

guestbook的类我建了,不行啊!

2010-11-06 17:08:21

#5 jake

关联操作中,两个表的“全部字段”,都不要有相同的。

上面楼主的两表中,ID和NAME都是相同的。把USER的改成UID,USERNAME,把GB的改成GBID,GBNAME吧。

2010-11-07 09:36:20

#6 cody

我把USER的改成uid,uname,把GB的改成gid,gname
class user extends spModel{
public $pk = 'uid';
public $table = 'user';
var $linker = array(
array(
    'type'=>'hasmany',
   'map'=>'gb',
   'mapkey'=>'uname',
    'fclass'=>'guestbook',
   'fkey'=>'gname',
   'enabled'=>true
),
);
}
?>

然后运行
class many extends spController{
function create(){
$newrow = array(
    'uname' => '羊村长',
    'gb' => array(
    array('contents'=>'大家好我是村长'),
    array('contents'=>'下面我来说两句'),
   array('contents'=>'以下省略一万五千字'), ),
);
$user = spClass("user");
$user->spLinker()->create($newrow);
}
}
?>


gname字段中也是添加了uid,而不是我想添加的uname内容.为什么呢???

2010-11-07 14:08:33

#7 jake

只能说建议你直接先按照教程中的字段等来做,好了再改成自己的。

2010-11-08 08:47:47

#8 cody

按教程做的没有问题,只是改了用name关联就不行了!

2010-11-08 12:38:34

#9 jake

检查了一下,的确有问题,spLinker的新增只能支持关联是主键ID的项。
目前着手去调整相关代码

2010-11-08 13:02:27

#10 cody

:)加油!!jake兄!!

2010-11-08 14:32:11