【问题标题】:Doctrine2 filled relation generates null valueDoctrine2 填充关系生成空值
【发布时间】: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


    【解决方案1】:

    好的,现在一切都清楚了。

    首先,我在处理实体时可能会出现这个问题,为此我创建了事件监听器“postUpdate”。我错了。

    缓存有问题。清除缓存并重新启动apache后,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2022-11-20
      • 2012-12-29
      • 2013-06-07
      • 2023-01-23
      • 1970-01-01
      相关资源
      最近更新 更多