當我使用HYDRATE_OBJECT
時,我在使用Doctrine 2表現很掙扎。當我從HYDRATE_ARRAY
切換到HYDRATE_OBJECT
時,它花費了將近10倍的時間!我用doctrine 2 and zend paginator參考:學說2.2 + Zend框架分頁速度優化
$query = $em->createQuery($dql)
->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY)
->setParameter('x', 1);
// Pagination
$paginator = new Doctrine\ORM\Tools\Pagination\Paginator($query, false);
$iterator = $paginator->getIterator();
die(); // 160 ms
VS
$query = $em->createQuery($dql)
->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_OBJECT)
->setParameter('x', 1);
// Pagination
$paginator = new Doctrine\ORM\Tools\Pagination\Paginator($query, false);
$iterator = $paginator->getIterator();
die(); // 1.4s
我應該注意什麼?如何減少處理時間並仍然使用HYDRATE_OBJECT
?有沒有更好的方法來完成分頁?
*編輯:使用->setFirstResult($itemsPerPage * $page - $itemPerPage)->setMaxResults($itemsPerPage);
顯著減少加載時間,但使用$iterator
時:
$adapter = new \Zend_Paginator_Adapter_Iterator($iterator);
$zend_paginator = new \Zend_Paginator($adapter);
$zend_paginator->setItemCountPerPage($itemsPerPage)
->setCurrentPageNumber($page);
Zend公司只知道$itemsPerPage
,(count($iterator) == $itemsPerPage
),因此分頁鏈接始終只計算1頁。我如何使用Zend_Paginator完成適當的分頁,並且只加載$itemsPerPage
實體?
你是否分析了你的代碼?如果不知道模型中的業務邏輯類型,很難回答這個問題。 –
除了 - > add()ArrayCollection實體沒有業務邏輯。休息是簡單的制定者和獲得者。 –
使用OneToMany連接時,setMaxResults是否存在問題? –