JSON响应-加入学说

时间:2018-12-26 15:21:56

标签: json join doctrine

我在symfony 4.2 proyect(REST API)上使用Donctrine 2.6.3。 我在生成一些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?)存在问题。 加入有问题吗? 如何撤消关系所有者?

先谢谢您。 朱利安

0 个答案:

没有答案