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

0

У меня есть две сущности, почта и т.п., Сообщение имеет однопользовательское напоминание.

Почтовый класс

   /**
 * 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-объекте?

Теги:
doctrine
dql

1 ответ

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
    это работает, но это не более жадно, если есть огромное количество запросов?
  • 0
    Я думаю, что вы должны быть в порядке, так как COUNT рассчитывается на стороне DBMS , поэтому никаких дополнительных запросов не будет запущено. Кроме того, я предполагаю, что $count относительно невелик, может быть, максимум 50-100? Это количество итераций, но PHP должен справиться с этим довольно быстро.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню