好的,-this可能很简单,但是我很难想象我需要在ATK4中放什么东西。
我有一个表(team),其中包含id、name和reference列。id是一个自动增量列和一个引用。表中有3行,如下所示
id, name, last_ref
1, 'Team 1', 1000
2, 'Team 2', 1000
3, 'Team 3', 2000还有另一个表(story),其中包含id、name、team_id和team_ref列,填充数据后如下所示
id, name, team_id, team_ref
1, 'Story A', 1, 1001
2, 'Story B', 1, 1002
3, 'Story C', 1, 1003
4, 'Story D', 2, 1001
5, 'Story E', 3, 2001对于每次插入到故事表中,都会在team表中查找team_ref,递增1,并将结果存储在故事行中。last_ref字段也应该立即更新,以防其他任何人也向story表中插入新行。
因此,在上面插入到故事表中之后,团队表应该如下所示,以便每个团队都保持自己的序列并按顺序分配数字。
id, name, last_ref
1, 'Team 1', 1003
2, 'Team 2', 1001
3, 'Team 3', 2001插入故事记录的页面是CRUD,但不确定我是否应该将逻辑插入CRUD、页面或模型本身。它应该只影响插入,我想也许它应该是addField上的一个defaultValue (‘last_ref’),但是我能让它成为一个函数吗?应该在哪里定义这个函数?
虽然不是必须的,但有一点很好,那就是递增的last_ref应该跳过当前团队的表中已经使用的任何引用(如果是通过CRUD以外的其他方式插入的)。
提前谢谢。
发布于 2011-10-17 00:33:10
当然,Model是适合这样与数据库相关的逻辑的地方。
重新定义beforeInsert函数,该函数将锁定表、查找最大元素并设置引用:
function beforeInsert(&$data){
$this->myLockTable();
$next_ref = $this->myGetNextRef();
$data['team_ref']=$next_ref;
return parent::beforeInsert($data);
}
function afterInsert($id){
parent::afterInsert($id);
$team = $this->add('Model_Team')->loadData($this->get('team_id'));
$team->set('last_ref',$this->get('team_ref'))->update();
$this->myUnlockTable();
}这里以"my“开头的函数将是您自定义实现的函数。
然后,假设您正确地使用了模型,则将没有“其他方法”来插入记录,并且您将不需要担心跳过这些条目。
https://stackoverflow.com/questions/7783199
复制相似问题