OneToMany 计数属性
OneToMany count attribute
我有两个实体,post 和喜欢,post 有一个 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;
//...
}
喜欢Class
/**
* 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 秒内的点赞数。
我在 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;
我有两个实体,post 和喜欢,post 有一个 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;
//...
}
喜欢Class
/**
* 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 秒内的点赞数。 我在 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;