Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一元计数属性_Php_Symfony_Doctrine_Dql - Fatal编程技术网

Php 一元计数属性

Php 一元计数属性,php,symfony,doctrine,dql,Php,Symfony,Doctrine,Dql,我有两个实体,post和like,post有一个喜欢的实体 课程结束后 /** * Post * * @ORM\Table() * @ORM\Entity(repositoryClass="Mag\MyBundle\Entity\PostRepository") */ class Post { //... /** *@ORM\OneToMany(targetEntity="Mag\MyBundle\Entity\LikePost",mappedBy="

我有两个实体,post和like,post有一个喜欢的实体

课程结束后

   /**
 * 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 ;
    //...
}
喜欢上课

   /**
 * 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 ;
    //...
}
我想知道帖子里喜欢的人的数量。 我在邮件库里试过了

$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'))的结果存储在post对象的“$countLikes”属性中?

您可能可以编写自定义水合驱动程序来解释结果,但我还没有做过类似的事情

你能手工做吗

$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;

这是可行的,但是如果有大量的查询,这不是更贪婪吗?我想你应该没问题,因为
COUNT
是在
DBMS
端计算的,所以不会触发额外的查询。另外,我假设
$count
相对较小,可能最大为50-100?这是迭代的次数,但是
PHP
应该可以很快处理这个问题。请回答另一个问题,我如何使用where子句进行计数?非常感谢大家。
$qb->andWhere(“COUNT(p.likes)>:COUNT”)
工作吗?如果没有,请尝试
$qb->addSelect(“将(p.likes)计数为likeCount”)->和where(“likeCount>:COUNT”)
否,我想获取指定喜欢的计数,例如:
select COUNT(p.likes)where p.likes.date='2015-01-30'