Json 为什么我';我在mi Symfony 2 REST API中获取一些值中的所有数据库信息?

Json 为什么我';我在mi Symfony 2 REST API中获取一些值中的所有数据库信息?,json,api,rest,symfony,doctrine,Json,Api,Rest,Symfony,Doctrine,我正在用symfony2构建一个RESTAPI,我遇到了一个非常罕见的问题。。。我有一个“customers”表,它与一个omany和另一个“control”表相关,如果我试图获取一个客户,它的值在“control”表中,我得到的是JSON格式的所有数据库信息…: 例如:id=12的客户在“控制”表中没有关联的数据,所以如果我有 我得到了正确的JSON { "customer": { "id": 12, "name": "Zampacontos",

我正在用symfony2构建一个RESTAPI,我遇到了一个非常罕见的问题。。。我有一个“customers”表,它与一个omany和另一个“control”表相关,如果我试图获取一个客户,它的值在“control”表中,我得到的是JSON格式的所有数据库信息…:

例如:id=12的客户在“控制”表中没有关联的数据,所以如果我有 我得到了正确的JSON

{
    "customer": {
        "id": 12,
        "name": "Zampacontos",
        "lastname": "",
        "address": "",
        "phone": "000000000",
        "pass": "no tiene",
        "tasks": "Portátil Toshiba con cargador y funda negra \"tec air\".\r\n Cambiar pila BIOS y comprobar que no de errores (optimizar) Urgente ",
        "status": "Terminado",
        "email": "",
        "date": "2015-11-06T13:06:00+0100",
        "location": "Tienda",
        "is_active": 0,
        "controls": [],
        "histories": []
    }
}
但是如果我对id=11做同样的操作(一个有“控制”和“历史记录”的客户就是当我得到我所有的数据库信息时

有什么想法吗?提前谢谢:)

编辑:

以下是我为一个或所有客户提供的API控制器:

<?php

namespace Ourentec\OurentecApiBundle\Controller\v1;


use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use Symfony\Component\HttpFoundation\Request;

class CustomerController extends FOSRestController{
    /**
     * @return array
     * @Rest\Get("/customers/{id}")
     * @Rest\View
     */
    public function getCustomerAction($id)
    {
        $customer = $this->getDoctrine()->getRepository('OurentecBundle:Customer')->find($id);

        return array('customer' => $customer);
    }

    /**
     *
     * @return array
     * @Rest\Get("/customers/")
     * @Rest\View
     */
    public function getUsersAction()
    {
        $customers = $this->getDoctrine()->getRepository('OurentecBundle:Customer')->findAll();

        return array('customers' => $customers);
    }
} 

这是因为
find
findAll
方法的行为不同

在引擎盖下,
findAll
使用急切加载,但是
find
是懒惰的

因此findAll将从所有相关实体获取数据

Find将只获取关系的ID,将代理对象放在关系字段中


如果您想拥有完全控制权,只需使用查询生成器在实体存储库中实现findAll方法。

这是因为
find
findAll
方法的行为不同

在引擎盖下,
findAll
使用急切加载,但是
find
是懒惰的

因此findAll将从所有相关实体获取数据

Find将只获取关系的ID,将代理对象放在关系字段中


如果您想拥有完全的控制权,只需使用查询生成器在实体存储库中实现findAll方法。

那么,我决定只从客户那里获取一些有趣的字段

型号:

public function getCustomerForApi($customerId)
    {
        $customer = $this->em
            ->createQuery('select c.name, c.lastname, c.address, c.phone, c.pass, c.tasks, c.email, c.status, c.location
            from OurentecBundle:Customer c where c.id = :id')
            ->setParameter('id', $customerId)
            ->getResult();

        return $customer;
    }
和控制器:

/**
     * @return array
     * @Rest\Get("/customers/{id}")
     * @Rest\View
     */
    public function getCustomerAction(Request $request)
    {
        $customerModel = $this->get('ourentec.customer_model');
        $customer = $customerModel->getCustomerForApi($request->get('id'));

        return array('customer' => $customer);
    }
这并不完全是我想要的,但它可以很好地用于测试:)


再次非常感谢Mateusz

嗯,所以我决定只从我的客户那里得到一些有趣的领域

型号:

public function getCustomerForApi($customerId)
    {
        $customer = $this->em
            ->createQuery('select c.name, c.lastname, c.address, c.phone, c.pass, c.tasks, c.email, c.status, c.location
            from OurentecBundle:Customer c where c.id = :id')
            ->setParameter('id', $customerId)
            ->getResult();

        return $customer;
    }
和控制器:

/**
     * @return array
     * @Rest\Get("/customers/{id}")
     * @Rest\View
     */
    public function getCustomerAction(Request $request)
    {
        $customerModel = $this->get('ourentec.customer_model');
        $customer = $customerModel->getCustomerForApi($request->get('id'));

        return array('customer' => $customer);
    }
这并不完全是我想要的,但它可以很好地用于测试:)

再次非常感谢Mateusz

为什么不使用:

$customer=$this->getdoctor()->getRepository('OurentecBundle:customer')->findOneById($id)

为什么不使用:


$customer=$this->getdoctor()->getRepository('OurentecBundle:customer')->findOneById($id)

你能告诉我们你是如何建立你的查询的吗?“我所有的数据库信息”是什么意思。谢谢你能告诉我们你是如何建立你的查询的吗?“我所有的数据库信息”是什么意思。谢谢,我来试试。理论上,使用另一个,我只得到一个结果,但我得到了所有数据库:S$this->getDoctrine()->getRepository('OurentecBundle:Customer')->findBy(数组('id'=>id,'isActive'=>true),因为DB表中只有一个$id(isActive是为了知道客户现在是否有关联)我会试试。理论上,使用另一个,我只得到一个结果,但我得到了所有数据库:S$this->getDoctrine()->getRepository('OurentecBundle:Customer')->findBy(array('id'=>$id,'isActive'=>true),因为DB表中只有一个$id(isActive是为了知道客户现在是否有关联)