【求助】关于一对多关联的问题!
发布于:2022-01-17 09:50:54
#1 cody
我guestbook,和user的结构如下


我想用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
),
);
}
?>

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