Я создал объект Customer с отношением ManyToOne к Партнеру.Партнер имеет обратное отношение OneToMany к Клиенту.
Я звоню $partner->getCustomers()
, и у меня есть результат, который в порядке, хотя я не могу что-то объяснить.Во-первых, вот запрос:
public function getCustomersByPartner(SerializerInterface $serializer, $id)
{
/* @var $partner Partner */
$partner = $this->getDoctrine()->getRepository(Partner::class)->find($id);
$customers = $serializer->serialize($partner->getCustomers(), 'json');
$response = new Response($customers);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
А вот полный результат (при вызове маршрута хост / партнер / 3, где 3 - идентификатор партнера):
[
{
"id": 4,
"url": "www.test.com",
"subscription_status": "active",
"first_payment": "2019-02-22T09:55:47+00:00",
"created_at": "2019-02-22T09:55:47+00:00",
"updated_at": "2019-02-22T09:55:47+00:00",
"partner": {
"id": 3,
"firstname": "Partner3",
"lastname": "Partner3",
"authenticated": 1,
"created_at": "2019-02-22T10:05:04+00:00",
"updated_at": "2019-02-22T10:05:04+00:00",
"customers": [
{
"id": 9,
"url": "www.blabla.com",
"subscription_status": "active",
"first_payment": "2019-02-22T13:23:43+00:00",
"created_at": "2019-02-22T13:23:43+00:00",
"updated_at": "2019-02-22T13:23:43+00:00"
}
]
}
},
{
"id": 9,
"url": "www.blabla.com",
"subscription_status": "active",
"first_payment": "2019-02-22T13:23:43+00:00",
"created_at": "2019-02-22T13:23:43+00:00",
"updated_at": "2019-02-22T13:23:43+00:00",
"partner": {
"id": 3,
"firstname": "Partner3",
"lastname": "Partner3",
"authenticated": 1,
"created_at": "2019-02-22T10:05:04+00:00",
"updated_at": "2019-02-22T10:05:04+00:00",
"customers": [
{
"id": 4,
"url": "www.test.com",
"subscription_status": "active",
"first_payment": "2019-02-22T09:55:47+00:00",
"created_at": "2019-02-22T09:55:47+00:00",
"updated_at": "2019-02-22T09:55:47+00:00"
}
]
}
}
]
Я делаюесть все клиенты, принадлежащие идентификатору партнера 3 , но я ожидал, что в моем массиве customers
(в обоих объектах "партнера") будет содержаться каждый клиент, присоединенный к этому партнеру (то есть, клиент 4 и клиент 9)в данном случае).
Я не могу выразить это словами, надеюсь, вы понимаете, о чем я.Вот что я ожидал:
"customers": [
{
"id": 9,
"url": "www.blabla.com",
"subscription_status": "active",
"first_payment": "2019-02-22T13:23:43+00:00",
"created_at": "2019-02-22T13:23:43+00:00",
"updated_at": "2019-02-22T13:23:43+00:00"
},
{
"id": 4,
"url": "www.test.com",
"subscription_status": "active",
"first_payment": "2019-02-22T09:55:47+00:00",
"created_at": "2019-02-22T09:55:47+00:00",
"updated_at": "2019-02-22T09:55:47+00:00"
}
]
Это потому, что Symfony сначала возвращает первого клиента, а затем показывает, что осталось?Это доктрина специфическое поведение?
Что забавно, если я сделаю обратное и посмотрю, какой клиент принадлежит какому партнеру, у меня будет возвращен этот результат: (вызов маршрута хост / клиент / 4, где 4 - идентификатор клиента)
{
"id": 3,
"firstname": "Partner3",
"lastname": "Partner3",
"authenticated": 1,
"created_at": "2019-02-22T10:05:04+00:00",
"updated_at": "2019-02-22T10:05:04+00:00",
"customers": [
{
"id": 4,
"url": "www.test.com",
"subscription_status": "active",
"first_payment": "2019-02-22T09:55:47+00:00",
"created_at": "2019-02-22T09:55:47+00:00",
"updated_at": "2019-02-22T09:55:47+00:00"
},
{
"id": 9,
"url": "www.blabla.com",
"subscription_status": "active",
"first_payment": "2019-02-22T13:23:43+00:00",
"created_at": "2019-02-22T13:23:43+00:00",
"updated_at": "2019-02-22T13:23:43+00:00"
},
{
"id": 10,
"url": "www.blabla.com",
"subscription_status": "active",
"first_payment": "2019-02-22T13:53:02+00:00",
"created_at": "2019-02-22T13:53:02+00:00",
"updated_at": "2019-02-22T13:53:02+00:00"
}
]
}
И вот функция:
/**
* @Route("/customer/{id}", name="customer_detail")
* @param SerializerInterface $serializer Serializer service
* @param Integer $id Id of customer
* @return Response Return name of the partner
*/
public function getPartnerByCustomer(SerializerInterface $serializer, $id)
{
/* @var $customer Customer */
$customer = $this->getDoctrine()->getRepository(Customer::class)->find($id);
$partner = $serializer->serialize($customer->getPartner(), 'json');
$response = new Response($partner);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
Это именно то, что я ожидал бы для первого запроса.Спасибо за ваше время.