检索由特定 Symfony 用户创建的帖子

Retrieve posts created by a specific Symfony user

我有一个 $ 类型的布尔值 属性,我需要区分我的两种类型的帖子 我正在尝试检索类型 = true 的帖子,(这是食谱)用户个人资料的特定用户页。

/**
     * @Route("/profil/{id}", name="profil", methods={"GET","POST"})
     * 
     */
    public function index(User $user): Response
    {
        $em = $this->getDoctrine()->getManager();
        $publications = $em->getRepository('App:Publication')->findBy(
            array('users' => $user->getId()),
            array('created_at' => 'Desc')
        );

         ****// list the publication of recipes
         $recette = $em->getRepository('App:Publication')->findBy(['type'=>true],['created_at' => 'desc']);****
        

        // recuperar las 3 ultimas recetas para el sidebar rigth
        $lastRecettes = $this->getDoctrine()->getRepository(Publication::class)->lastXRecette(4);
        // lister les 9 dernières recettes
        $recette = $this->getDoctrine()->getRepository(Publication::class)->lastPRecette(9);      

        return $this->render('profil/index.html.twig', [          
            'publications' => $publications,
            'recettes' => $recette,
            'user' => $user,
            'lastRecettes' => $lastRecettes,
        ]);
    } 

突出显示的部分允许我检索所有食谱,但我不知道如何添加用户我试过了,但它不正确:

$recette = $em->getRepository('App:Publication')->findBy(['type'=>true], ['users' => $user->getId()],['created_at' => 'desc']);

我不确定我是否理解你的问题

但您的代码可能如下所示:

/**
     * @Route("/profil/{id}", name="profil", methods={"GET","POST"})
     * 
     */
    public function index(User $user): Response
    {
        $em = $this->getDoctrine()->getManager();
        // First type
        $truePublications = $em->getRepository(Publication::class)->findBy(
            array('user' => $user->getId(), 'type' => true),
            array('created_at' => 'DESC'),
        );

        // Second type
        $falsePublications = $em->getRepository(Publication::class)->findBy(
            array('user' => $user->getId(), 'type' => false),
            array('created_at' => 'DESC'),
        );

        // recuperar las 3 ultimas recetas para el sidebar rigth
        $lastRecettes = $this->getDoctrine()->getRepository(Publication::class)->lastXRecette(3);
        
        // lister les 9 dernières recettes
        $recette = $this->getDoctrine()->getRepository(Publication::class)->lastPRecette(9);      

        return $this->render('profil/index.html.twig', [          
            'trueTypePublications' => $truePublications,
            'falseTypePublications' => $falsePublications,
            'recettes' => $recette,
            'user' => $user,
            'lastRecettes' => $lastRecettes,
        ]);
    } 

是的,正如@mustapha-ghlissi 所提议的(但可能以一种令人困惑的方式),您必须在 findBy 方法的第一个参数中包含对用户的测试,如下所示:

$recette = $em->getRepository('App:Publication')->findBy(['type' => true, 'users' => $user->getId()],['created_at' => 'desc']);

PublicationRepository.php

     public function getRecettesUser(User $user)
    {
        return $this->createQueryBuilder('p')
            ->andWhere('p.users = :user')
            ->andWhere('p.type = :type')
            ->setParameter('user', $user)
            ->setParameter('type', true)
            ->getQuery()
            ->getResult();
    }

创建文件夹src/Manager/PublicationManager.php

use App\Entity\Publication;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;

class PublicationManager
{
    protected $em;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->em = $entityManager;
    }

       
    public function getRecetteByUser(User $user)
    {
        return $this->em->getRepository(Publication::class)->findBy(
         ['type' => true, 'users' => $user->getId()],['created_at' => 'desc']
         );        
    }

}

我的控制器


    /**
     * @Route("/profil/{id}", name="profil", methods={"GET","POST"})
     * 
     */
    public function index(User $user, PublicationManager $publicationManager): Response
    {
       $em = $this->getDoctrine()->getManager();
        $publications = $em->getRepository('App:Publication')->findBy(
            array('users' => $user->getId()),
            array('created_at' => 'Desc')
        );

         // recuperer les 3 dernier recettes pour le sidebar right
        $lastRecettes = $this->getDoctrine()->getRepository(Publication::class)
        ->lastXRecette(4);
       
        return $this->render('profil/index.html.twig', [
            'publications' => $publications,
            'recettes' => $publicationManager->getRecetteByUser($user),         
            'lastRecettes' => $lastRecettes,
             
        ]);
     }