当没有会话cookie时,Doctrine对象不完整,为什么?

时间:2017-01-06 12:23:07

标签: php session doctrine-orm symfony

今天早上我遇到了一个愚蠢的问题,我很难找到一个像样的解决方案。也许你可以给我小费......

我在实体存储库中使用这个简单的函数,只需一个简单的查询:

DeliveryRound {#342 ▼
  -id: 117
  -endOfOrdersDate: DateTime {#346 ▶}
  -parts: PersistentCollection {#428 ▼
    -snapshot: array:2 [ …2]
    -owner: DeliveryRound {#342}
    -association: array:15 [ …15]
    -em: EntityManager {#695 …11}
    -backRefFieldName: "deliveryRound"
    -typeClass: ClassMetadata {#373 …}
    -isDirty: false
    #collection: ArrayCollection {#412 ▼
      -elements: array:2 [▼
        0 => DeliveryRoundPart {#425 ▼
          -id: 134
          -deliveryDate: DateTime {#347 ▶}
          -deliveryHourStart: null
          -deliveryHourEnd: null
          -maxDeliveries: null <------ HERE !!!!!!!!!!!
          -countDeliveries: null
          -deliveryRound: DeliveryRound {#342}
          -day: ZoneDeliveryDay {#1302 ▶}
          -ordersCustomers: PersistentCollection {#358 ▶}
          -ordersProviders: PersistentCollection {#410 ▶}
          -relayRounds: PersistentCollection {#637 ▶}
          -roadSheetOptimizationData: null
        }
        1 => DeliveryRoundPart {#1444 ▶}
      ]
    }
    #initialized: true
  }
  -ordersProvidersGenDate: null
  -roadSheetPath: null
  -roadSheetGenDate: null
  -preparationSheetPath: null
  -preparationSheetGenDate: null
  -deliveryMailNotificationsSendingDate: null
  -deliveryNotificationsSendingDate: null
  #translations: PersistentCollection {#420 ▶}
  #newTranslations: null
  #currentLocale: "fr"
  #defaultLocale: "fr"
}

在第一次加载时(没有创建会话cookie),我得到了一个不完整的结果:

DeliveryRound {#1657 ▼
  -id: 117
  -endOfOrdersDate: null
  -parts: PersistentCollection {#1794 ▼
    -snapshot: array:2 [ …2]
    -owner: DeliveryRound {#1657}
    -association: array:15 [ …15]
    -em: EntityManager {#695 …11}
    -backRefFieldName: "deliveryRound"
    -typeClass: ClassMetadata {#1673 …}
    -isDirty: false
    #collection: ArrayCollection {#1795 ▼
      -elements: array:2 [▼
        0 => DeliveryRoundPart {#1747 ▼
          -id: 134
          -deliveryDate: null
          -deliveryHourStart: null
          -deliveryHourEnd: null
          -maxDeliveries: 30 <------ HERE !!!!!!!!!!!
          -countDeliveries: 0
          -deliveryRound: DeliveryRound {#1657}
          -day: ZoneDeliveryDay {#2063 ▶}
          -ordersCustomers: PersistentCollection {#1904 ▶}
          -ordersProviders: PersistentCollection {#1896 ▶}
          -relayRounds: PersistentCollection {#2187 ▶}
          -roadSheetOptimizationData: null
        }
        1 => DeliveryRoundPart {#2188 ▶}
      ]
    }
    #initialized: true
  }
  -ordersProvidersGenDate: null
  -roadSheetPath: null
  -roadSheetGenDate: null
  -preparationSheetPath: null
  -preparationSheetGenDate: null
  -deliveryMailNotificationsSendingDate: null
  -deliveryNotificationsSendingDate: null
  #translations: PersistentCollection {#1799 ▶}
  #newTranslations: null
  #currentLocale: "fr"
  #defaultLocale: "fr"
}

在第二次调用(刷新)时,会话cookie被创建并且结果是正确的(maxDeliveries:30是正确的值):

public function findAvailabilityByDr($delivery_round_id) {
    $qb = $this->_em->createQueryBuilder()
        ->select('dro, 
                  drp')
        ->from($this->_entityName, 'dro')
        ->leftJoin('dro.parts', 'drp')
        ->where('dro.id = :delivery_round_id')
        ->setParameters(array(
            'delivery_round_id' => $delivery_round_id,
        ));

    return $qb->getQuery()->getOneOrNullResult();
}

当我使用$ qb-&gt; getQuery() - &gt; getArrayResult()时 结果在两种情况下都是正确的。

WTF?是bug吗?

感谢您的帮助!

修改

如果我把它简化为最简单的表达式,没有部分和来自控制器的调用,那么bug仍然存在......

存储库:

class StructureController extends BasePublicCommonController
{
    public function indexAction()
    {
        $delivery_round = $this->getDoctrine()->getManager()->getRepository('ProxymartDeliveryBundle:DeliveryRound')->findAvailabilityByDr(117);
        dump($delivery_round);
        die();
    }
}

控制器:

npm install --save react-redux

对于这样的事情我有时讨厌编程:)

1 个答案:

答案 0 :(得分:-1)

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/partial-objects.html

我不知道cookie,但我知道对于arrayResult():

  

部分对象问题通常不适用于不将查询结果作为对象检索的方法或查询。例如:Query#getArrayResult()[...]