Существует три объекта: Клиент, Сообщения, Приложения.Желаемая загрузка связанного объекта в Symfony 2
Связь между этими объектами прямолинейна: у клиента может быть много сообщений, а сообщение может иметь много вложений. Оба отношения - «один ко многим».
Я сказал учению, чтобы он ленился при загрузке сообщений для объекта Customer. Итак, $customer->getMessages()
приводит к дополнительному запросу SQL. Хорошо.
Но я также определил загрузку «EAGER» для вложений для объекта Message.
Теперь я ожидал, что сообщения, которые я получаю, позвонив по телефону $customer->getMessages()
, уже загружены со всеми их вложениями. Но $message->getAttachments()
все еще вызывает одну инструкцию SQL для каждого сообщения.
Ожидается ли такое поведение?
Просто для справки, excepts из моих классов:
Customer.php
class Customer
{
/**
* @ORM\OneToMany(targetEntity="Message", mappedBy="customer")
* @ORM\OrderBy({"createdOn" = "DESC"})
*/
private $messages;
message.php
class Message
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Customer", inversedBy="messages")
* @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
**/
private $customer;
/**
* @ORM\OneToMany(targetEntity="Attachment", mappedBy="message", fetch="EAGER")
**/
private $attachments;
attachment.php:
class Attachment
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Message", inversedBy="attachments")
* @ORM\JoinColumn(name="message_id", referencedColumnName="id")
**/
private $message;
Я думаю, что это была впервые реализована в Учении 2.5. Я подозреваю, что вы используете 2.4? – Cerad
Да, я использую 2.4. Поэтому сейчас я должен буду решить эту проблему. – Jens