JSON response - Присоединяйтесь к Доктрине - PullRequest
0 голосов
/ 26 декабря 2018

Я использую Donctrine 2.6.3 для проекта Symfony 4.2 (REST API).и у меня есть проблемы с некоторыми сгенерированными json Theres 2 основных объекта:

class Usuarios{
    /**
     * @var int
     *
     * @ORM\Column(name="dni", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $dni;
    /**
     * @var string
     *
     * @ORM\Column(name="nyape", type="string", length=30, nullable=false)
     */
    private $nyape;

    public function getDni(): ?int{
        return $this->dni;
    }

    public function getNyape(): ?string{
        return $this->nyape;
    }

    public function setNyape(string $nyape): self{
        $this->nyape = $nyape;
        return $this;
    }

     /**
     * @ORM\OneToMany(targetEntity="Infracciones", mappedBy="dni", cascade={"all"})
     * @var Doctrine\Common\Collection\ArrayCollection
     */
    private $infracciones;


}

class Infracciones{
    /**
     * @var int
     *
     * @ORM\Column(name="nro_infraccion", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $nroInfraccion;

    /**
     * @var float
     *
     * @ORM\Column(name="monto", type="float", precision=10, scale=0, nullable=false)
     */
    private $monto;

    /**
     * @var \Usuarios
     *
     * @ORM\ManyToOne(targetEntity="Usuarios", inversedBy="infracciones")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="dni", referencedColumnName="dni")
     * })
     */
    private $dni;

    public function getNroInfraccion(): ?int{
        return $this->nroInfraccion;
    }

    public function getMonto(): ?float{
        return $this->monto;
    }

    public function setMonto(float $monto): self{
        $this->monto = $monto;
        return $this;
    }

    public function getDni(): ?Usuarios{
        return $this->dni;
    }

    public function setDni(?Usuarios $dni): self{
        $this->dni = $dni;
        return $this;
    }


}

В некоторых контроллерах есть метод:

public function searchInfraccionesDeUsuarioPorDniV2($dni){

    $entityManager = $this->getDoctrine()->getEntityManager();
    $query = $entityManager->createQuery('SELECT u,i 
                 FROM App\Entity\Infracciones u
                 JOIN u.dni i where i.dni=11111111');

    $usuarios = $query->getArrayResult();

    $response = new Response();
    $response->headers->set('Content-Type', 'application/json');
    $response->setContent(json_encode($usuarios));

    return $response;

}

Он генерирует этот json:

[
{
  "nroInfraccion":1,
  "monto":11,
  "dni":{
         "dni":11111111,
         "nyape":"Lucas"
        }
},
{
  "nroInfraccion":2,
  "monto":22,
  "dni":{
          "dni":11111111,
          "nyape":"Lucas"
        }
}
]

Это не то, что мне нужно.Мне нужен этот формат json:

{
 "dni":11111111,
 "nyape":"Lucas",
 "infracciones":[
              {
                "nroInfraccion":1,
                "monto":11
              },
              {
                "nroInfraccion":2,
                "monto":22
              }
              ]
}

Я думаю, что есть проблема с владельцем отношения (mappedby? Inverdedby?).Это проблема с объединением?Как можно поменять владельца отношения?

Заранее спасибо.Джулиан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...