Returning JSON array in (old) PHP Symfony

93 Views Asked by At

Be gentle, I'm a hacker not a professional developer!

I think I'm close, but I am getting tripped up by the different ways that a Controller can retrieve data and return it as JSON (to a data table). I thought it would be simple enough to clone another feature that was working, but oh no!

This is an old (version 3.4) PHP Symfony. [In parallel I've been prep'ing a test site to start the upgrade work].

Current State of Play: Just a single row of many is returned. But it is in the right JSON format (and happily rendered by the data table).

The controller function is ...

/**
     * @Route("/{slug}/feed", name="project_feed")
     * @Method({"GET", "POST"})* 
     * @param Request $request
     * @param Project $project
     * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function getProjectFeed(Request $request, Project $project)
    {
        $em = $this->getDoctrine()->getManager(); //Get feed for current project
        $query = $em->createQuery('SELECT a FROM AppBundle:ProjectFeed a WHERE a.project = :project_id');
        $this->logger->debug("ProjectController.getProjectFeed ... query == ", [$query]);
        $query->setParameter('project_id', $project->getId());
        $feed = $query->getResult(); // Retrieve feed if none exist return empty JSON response
        
        // Doesn't populate Modifier
        //$feed = $this->getDoctrine()->getRepository("AppBundle:Project")->getProjectFeed($project);
        
        $serializer = $this->get('app.service.serializer');
        return new Response($serializer->serializeEntity($feed, array('data_table')));
    }

Previously: I have had all rows returned, but there is a relationship in the entity that doesn't get populated and is completely dropped from the JSON.

The repository function was ...

     * @param Project $project
     * @return array
     */
    public function getProjectFeed(Project $project)
    {
        $em = $this->getEntityManager();
        $sql = 'SELECT a FROM AppBundle:ProjectFeed a WHERE a.project = :project_id';
        $query = $em->createQuery($sql);
        $query->setParameter('project_id', $project->getId());
        return $query->getResult(Query::HYDRATE_ARRAY);
    }

Any pointers on the correct way to do this so I ended up with all rows returned and the correctly formatted JSON with the related entity data populated would be most welcome. Thanks.

0

There are 0 best solutions below