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]);
哪些潜在问题导致更新和插入操作之间存在差异?感谢。
答案 0 :(得分:0)
最后,我通过在事件对象
上执行另一个保存查询来解决此问题$event->addParticipant($newParcipant);
$this->eventRepository->save($event);
我认为这是级联问题。但它现在对我来说仍然没有多大意义。我的一个假设是,doctrine足够聪明,它知道在HTTP请求之前执行相同的查询,因此它返回相同的(如陈旧的)数据,而不是第二次实际查询数据库。