问题描述
我需要检索用户最近收藏的 9 个帖子。 我有一个用户个人资料页面,其中列出了所有出版物以及每个用户创建的所有食谱,我有一个侧边栏,我想在其中显示最后 9 个收藏夹 Favorite look here 收藏夹
public function lastXFavorite(Publication $publication,User $user,$nombre)
{
return $this->createqueryBuilder('f')
->join('f.publication','pub')
->join('f.user','user')
->andWhere('pub.id = :pubId AND user.id = :userId')
->setParameter('pubId',$publication->getId())
->setParameter('userId',$user->getId())
->setMaxResults($nombre)
->getQuery()
->getResult();
}
这是我的用户个人资料页面的控制器 ProfilController
/**
* @IsGranted("ROLE_USER")
* @Route("/profil/{id}",name="profil",methods={"GET","POST"})
*
*/
public function index(User $user,PublicationManager $publicationManager): Response
{
// historique des les publications
$em = $this->getDoctrine()->getManager();
$publications = $em->getRepository('App:Publication')->findBy(
array('users' => $user->getId()),array('created_at' => 'Desc')
);
// Lister all mes Favorites
$favorites = $em->getRepository('App:Favorite')->findBy(
array('user' => $user->getId())
);
// last 9 favorites
return $this->render('profil/index.html.twig',[
'publications' => $publications,'mesRecettes' => $publicationManager->getRecetteByUser($user),'mesFavoris' => $favorites,'recettes' => $publicationManager->allRecette(),'user' => $user,'lastRecettes' => $publicationManager->lastXRecette(),'lastPRecettes' => $publicationManager->lastPRecette($user,6),]);
}
这是出版物的经理PublicationManager
class PublicationManager
{
protected $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
public function getPublicationByUser(User $user)
{
return $this->em->getRepository(Publication::class)->getPublicationUser($user);
}
public function getRecetteByUser(User $user)
{
return $this->em->getRepository(Publication::class)->findBy(
['type' => true,'users' => $user->getId()],['created_at' => 'desc']
);
}
public function allRecette()
{
return $this->em->getRepository(Publication::class)->findBy(
['type' => true],['created_at' => 'desc']
);
}
public function allPublication()
{
return $this->em->getRepository(Publication::class)->findBy([],['created_at' => 'desc']);
}
public function lastXRecette()
{
return $this->em->getRepository(Publication::class)->lastXRecette(4);
}
public function lastPRecette(User $user,$cant)
{
return $this->em->getRepository(Publication::class)->lastPRecette($user,$cant);
}
我是初学者,我很欣赏这些信息。谢谢
解决方法
我认为你不应该 pub.id = :pubId。
因此尝试使用第一个结果和最大结果并按顺序排序:
public function lastXFavorite(Publication $publication,User $user,$nombre)
{
return $this->createQueryBuilder('f')
->join('f.publication','pub')
->join('f.user','user')
->andWhere('user.id = :userId')
->setParameter('userId',$user->getId())
->orderBy('f.id','DESC')
->setFirstResult(0)
->setMaxResults(9)
->getQuery()
->getResult();
}