【发布时间】:2014-05-05 03:07:59
【问题描述】:
我对教义2的关系和事件有疑问。
我有这样的关系:
要点:
My\Entity\Point:
type: entity
table: null
manyToOne:
user:
targetEntity: User
game:
targetEntity: Game
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
point:
type: integer
date:
type: datetime
lifecycleCallbacks: { }
游戏:
My\Entity\Game:
type: entity
table: null
manyToOne:
user:
targetEntity: User
oneToMany:
points:
targetEntity: Point
mappedBy: game
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
date:
type: datetime
win:
type: boolean
lifecycleCallbacks: { }
所以:
- 一个用户可以玩很多游戏
- 一场比赛可以有很多积分
- 一分只能与一场比赛相关
- 一个用户可以有很多积分
另外,我有一些事件监听器
/**
* @param LifecycleEventArgs $args
*/
public function preUpdate(LifecycleEventArgs $args) {
$entity = $args->getEntity();
if ($entity instanceof Game && $args->hasChangedField('win')) {
$this->point->setUser($entity->getUser());
$this->point->setGame($entity);
switch(true){
case $args->getNewValue('win'):
$this->point->setPoint(1);
break;
case $args->getOldValue('win'):
$this->point->setPoint(-1);
break;
default:
break;
}
$this->haveToBeFlush = true;
}
}
/**
* @param PostFlushEventArgs $eventArgs
*/
public function postFlush(PostFlushEventArgs $eventArgs)
{
if ($this->haveToBeFlush === true) {
$eventArgs->getEntityManager()->persist($this->point);
$eventArgs->getEntityManager()->flush();
}
}
- 如果用户赢得/输掉比赛,我想为他创造积分 (1/-1)。
在 postFlush 之后,我可以在 db 中看到这样的记录:
id;user_id;point;date;game_id
6;17;-1;2014-03-26 15:02:01;NULL
不知道为什么game_id出现空值
【问题讨论】:
标签: orm doctrine-orm entity-relationship