保存新记录后,原则不会反映更改

时间:2018-03-07 06:13:27

标签: symfony doctrine repository

doctrine 2.5 with symfony 3.3

我有一个简单的应用程序事件和参与者。

function getEventDetail(){
    return eventDetail;
}

function joinEvent(participant) {
    ***First of all***, call getEventDetail() to get latest event detail

    ***if participant is in list (status = 0), update it to be status = 1***
    1. perform update
    2. call getEventDetail()
    3. return eventDetail content 

    ***if participant is not in list, it is a new insert***
    1. perform insert
    2. call getEventDetail()
    3. return eventDetail content 
}

我的情况是,如果它是更新,则返回的eventDetail可以反映更改。但如果它是插入,则返回的eventDetail无法反映更改。这会导致第一次用户加入事件并且返回的响应没有该信息。

更多细节: 在函数getEventDetail()中,有类似

的东西
$queryBuilder = $this->eventRepository->createQueryBuilder('e')
->addSelect('participants_object, customer_object')
->leftJoin('e.participants', 'participants_object')
->leftJoin('participants_object.me','customer_object')
->where('e.event_key = :eventKey')->setParameter('eventKey', $eventKey);

$query = $queryBuilder->getQuery();
$eventDetailObject = $query->getOneOrNullResult();

$participantCollection = $eventDetailObject->getParticipants();

内部函数joinEvent(),主要是跟随( if update

$participant = $this->participantRepository->
findOneBy(['event' => $currentEventDetail['id'], 'me' => $userID]);
$participant->setStatus(1);
$participant = $this->participantRepository->save($participant);
//after update successfully
return $latestEventDetail = $this->getEventDetailByEventKey($eventKey);

if insert

$event = $this->eventRepository->getById($currentEventDetail['id']);
$me = $this->customerRepository->getById($userID);
$newParticipant = new Participant();
$newParticipant->setEvent($event);
$newParticipant->setMe($me);
$newParticipant = $this->participantRepository->save($newParticipant);
//if insert success
return $latestEventDetail = $this->getEventDetailByEventKey($eventKey);

有一件事我想指出,因为我不确定我是否正确使用 findOneBy 事件 me 是与参与者对象关联的外来对象。 (但从测试结果来看,它按预期工作)

$participant = $this->participantRepository->
findOneBy(['event' => $currentEventDetail['id'], 'me' => $userID]);

哪些潜在问题导致更新和插入操作之间存在差异?感谢。

1 个答案:

答案 0 :(得分:0)

最后,我通过在事件对象

上执行另一个保存查询来解决此问题
$event->addParticipant($newParcipant);
$this->eventRepository->save($event);

我认为这是级联问题。但它现在对我来说仍然没有多大意义。我的一个假设是,doctrine足够聪明,它知道在HTTP请求之前执行相同的查询,因此它返回相同的(如陈旧的)数据,而不是第二次实际查询数据库。