Атрибут счета OneToMany

У меня есть две сущности: пост и лайк, посту нравится OneToMany.

Post Class

   /**
* Post
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Mag\MyBundle\Entity\PostRepository")
*/
class Post {
//...

/**
*@ORM\OneToMany(targetEntity="Mag\MyBundle\Entity\LikePost",mappedBy="post")
*
*/
private $likes;
private $countLikes;

//...
}

Как класс

/**
* LikePost
*
* @ORM\Table()
* @ORM\Entity
*/
class LikePost
{
//...

/**
* @ORM\ManyToOne(targetEntity="Mag\MyBundle\Entity\Post",cascade={"persist"},inversedBy="likes")
* @ORM\JoinColumn(nullable=false)
*/
private $post ;
//...
}

Я хочу получить количество лайков в постах.
я попробовал в PostRepository

$qb = $this->createQueryBuilder('p');
$query = $qb
->addSelect($qb->expr()->count('l'))
->leftJoin('p.likes', 'l')
->groupBy('p.id')
->orderBy('p.datePost', 'DESC')
->setFirstResult(($page - 1) * $count)
->setMaxResults($count)
->getQuery();

но это дает массив из двух запросов выбора.
Как я могу сохранить результат «-> addSelect ($ qb-> expr () -> count (‘l’))» в атрибуте «$ countLikes» в объекте post?

0

Решение

Вы могли бы написать пользовательский гидратор который интерпретирует результаты, но я еще ничего не сделал.

Вы можете сделать это вручную?

$query = $qb
->addSelect($qb->expr()->count('l'))
->leftJoin('p.likes', 'l')
->groupBy('p.id')
->orderBy('p.datePost', 'DESC')
->setFirstResult(($page - 1) * $count)
->setMaxResults($count)
->getQuery();

$result = $query->getResult();
$actualResult = array();

foreach ( $result as $r ){
// assuming that object is at position `0` and like count at position `1`
$r[0]->setCountLikes(intval($r[1]));

$actualResult[] = $r[0];
}

return $actualResult;
0

Другие решения

Других решений пока нет …