У меня есть два объекта, сообщение и тому подобное, сообщение имеет OneToMany.Атрибут подсчета OneToMany
Сообщение Класс
/**
* 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-объекте?
Это работает, но это не более жадный, если есть огромное количество запросов? – houssine
Я думаю, вы должны быть в порядке, так как 'COUNT' рассчитывается на стороне« СУБД », поэтому никаких дополнительных запросов не будет. Кроме того, я предполагаю, что '$ count' относительно невелик, может быть, 50-100 макс? Это число итераций, но 'PHP' должен обрабатывать это довольно быстро. –
Другой вопрос, пожалуйста, как я могу сделать счет с предложением where? и спасибо большое – houssine