Я хотел бы обновить мой проект symfony 2 от версии 2.3 до версии 2.7 LTS. У меня есть проблема в репозитории, чтобы получить результат запроса. В 2.3, этот запрос дает мне что-то:Получить содержимое ArrayCollection
public function findProtectedPublications($steps, $start, $end)
{
$query= $this->getEntityManager()
->createQueryBuilder()
->select('d.pubRefs')
->from('ImpressionDemandBundle:Event', 'h')
->innerJoin('h.demand','d')
->where('d.protectedPublications = :pub')
->setParameter('pub', 1)
->andWhere('h.date >= :start')
->setParameter('start', $start)
->andWhere('h.date <= :end')
->setParameter('end', $end)
->andWhere('h.stepId in (:steps)')
->setParameter('steps', $steps)
->orderBy('d.id','ASC')
->getQuery();
$results = $query->getResult();
$publications = array();
if ($results && ! empty ($results)){
foreach($results as $result){
$pubs = $result['pubRefs'];
if ($pubs && ! empty($pubs)){
foreach($pubs as $pub){
$publications[] = $pub;
}
}
}
}
return $publications;
}
Но этот код не работает в более ранней версии, потому что $ переменная пабы в ArrayCollection. Так что я изменил конец моего кода с этим:
$results = $query->getResult();
$publications = array();
if ($results && ! empty ($results)){
foreach($results as $result){
$pubs = $result['pubRefs'];
var_dump($pubs);
if (! $pubs->isEmpty()){
$arrayPubs = $pubs->toArray();
foreach($arrayPubs as $pub){
$publications[] = $pub;
}
}
}
}
return $publications;
В этой части, когда я дамп $ пабов переменные, у меня есть:
object(Doctrine\Common\Collections\ArrayCollection)#131 (2) {
["elements":"Doctrine\Common\Collections\ArrayCollection":private]=>
NULL
["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=>
array(1) {
[0]=>
object(Impression\DemandBundle\Entity\Publication)#125 (5) {
["editor":"Impression\DemandBundle\Entity\Publication":private]=>
string(24) "Journal Le Monde 4-10-13"
["coauthors":"Impression\DemandBundle\Entity\Publication":private]=>
string(12) "Machin Machin"
["title":"Impression\DemandBundle\Entity\Publication":private]=>
string(57) "La tragédie de Lampedusa: s"émouvoir, comprendre, agir."
["nbPages":"Impression\DemandBundle\Entity\Publication":private]=>
float(1)
["nbCopies":"Impression\DemandBundle\Entity\Publication":private]=>
float(40)
}
}
}
Таким образом, кажется, что есть элементы в этом ArrayCollection , но тест $ pubs-> isEmpty() дает истинный результат, поэтому в массиве $ публикаций нет ничего.
Edit: На самом деле, проблема, кажется, из-за мои данные в базе данных: для объекта предыдущего моего обновления, у меня быть_наст что-то вроде этого в базе данных:
O:43:"Doctrine\Common\Collections\ArrayCollection":1:{s:54:"Doctrine\Common\Collections\ArrayCollection_elements";a:1:{i:0;O:42:"Impression\DemandBundle\Entity\Publication":5:{s:50:"Impression\DemandBundle\Entity\Publicationeditor";s:5:"BREAL";s:53:"Impression\DemandBundle\Entity\Publicationcoauthors";s:5:"MONOT";s:49:"Impression\DemandBundle\Entity\Publicationtitle";s:18:"USA Canada mexique";s:51:"Impression\DemandBundle\Entity\PublicationnbPages";d:150;s:52:"Impression\DemandBundle\Entity\PublicationnbCopies";d:150;}}}
и это дает ошибка. Для объекта добавить после моего обновления, у меня есть что-то вроде этого в базе данных:
O:43:"Doctrine\Common\Collections\ArrayCollection":1:{s:53:"Doctrine\Common\Collections\ArrayCollectionelements";a:1:{i:0;O:42:"Impression\DemandBundle\Entity\Publication":5:{s:50:"Impression\DemandBundle\Entity\Publicationeditor";s:8:"dfg dfgd";s:53:"Impression\DemandBundle\Entity\Publicationcoauthors";s:7:"dfg dfg";s:49:"Impression\DemandBundle\Entity\Publicationtitle";s:5:"fdg d";s:51:"Impression\DemandBundle\Entity\PublicationnbPages";d:5;s:52:"Impression\DemandBundle\Entity\PublicationnbCopies";d:3;}}}
и функции findProtectedPublications() работает без ошибок.
Разница между двумя версиями: ArrayCollection_elements для первого и ArrayCollectionelements для второго.
Чтобы исправить эти данные, я попытался с
UPDATE demand SET pub_refs = REPLACE (pub_refs, "ArrayCollection_elements', 'ArrayCollectionelements')
, но это не работает из-за специальных символов. Пытается с
UPDATE demand SET pub_refs = REPLACE (pub_refs, "ArrayCollection�_elements', 'ArrayCollection�elements')
не работает лучше. Как я могу исправить эти данные?
Это не решение, а подсказка. Вы можете лучше выполнить запрос в объекте «Спрос» вместо объекта «Событие». Результатом будет множество требований, и тогда вам не нужно перебирать события, чтобы получить требования. Это упростит ваш метод. –