我有設備是品牌和維修的一部分,是設備的一部分。現在我正試圖獲得一個簡單的AJAX調用,這將允許我通過品牌名稱或設備名稱來搜索設備。不幸的是,我得到了循環引用。即使我爲循環引用編寫了一個處理程序以將其限制爲一個,我仍然在我的對象中獲得了太多信息。學說:如何抑制循環引用
考慮從連載我的DQL查詢以下回報:
[{ 「0」:{ 「ID」:1, 「名」: 「iPhone 1」, 「標識」:「iPhone1 「,」brand「:{」id「:2,」name「:」Apple「,」logo「:」apple「,」devices「:[」iPhone 1「,{」id「:2, 「iPhone」, 「標誌」: 「iPhone」, 「品牌」: 「蘋果」, 「deletedAt」:空, 「修理」:[]}], 「deletedAt」:空}, 「deletedAt」:空」修理 「:[]},」 名 「:」 蘋果 「},{」 0 「:{」 ID 「:2,」 名 「:」 iPhone 「 」標誌「: 」iPhone「, 」品牌「:{」 id「:2,」name「:」Apple「,」logo「:」apple「,」devices「:[{」id「:1,」name「:」iPhone 1「,」logo「 , 「品牌」: 「蘋果」, 「deletedAt」:空, 「修理」:[]}, 「iPhone」], 「deletedAt」:空}, 「deletedAt」:空, 「修理」:[]},」名稱「:」蘋果「}]
在這裏我根本不需要修理。但是,由於它是在PartEntity中引用的,我仍然收到一堆不必要的修復信息。我如何限制從對象中獲取的數據?
我控制器代碼:
public function ajaxShowDevicesAction(Request $request) {
//if ($request->isXmlHttpRequest()) {
$data = $request->query->get('data');
$result = "";
if ($data) {
$result = $this->getDoctrine()->getManager()->getRepository('AppBundle:Device')->findAllByBrandOrName($data);
}
if ($result) {
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$normalizers[0]->setCircularReferenceHandler(function ($object) {
return $object->getName();
});
$serializer = new Serializer($normalizers, $encoders);
$jsoncontent = $serializer->serialize($result, 'json');
$response = new Response($jsoncontent);
return $response;
}
// else { # unsure how to give a "no results" response
// $response = new Response(json_encode(array()));
// $response->headers->set('Content-Type', 'application/json');
// return $response;
// }
// } else {
// throw new HttpException(403, "Ajax access only");
// }
}
它被設置爲1,所以我應該把它設置爲0?甚至有可能確定將什麼數據傳遞給對象?出於優化目的,並不總是需要知道設備品牌的名稱,所以我會把它剪掉。 – bluppfisk