Esistono tre entità: Cliente, Messaggi, Allegati.Caricamento in corso dell'entità correlata in Symfony 2
La relazione tra queste entità è semplice: un cliente può avere molti messaggi e un messaggio può avere molti allegati. Entrambe le relazioni sono "one-to-many".
Ho detto alla dottrina di essere pigra durante il caricamento dei messaggi per l'entità Cliente. Quindi $customer->getMessages()
genera un'istruzione SQL aggiuntiva. Va bene.
Ma ho anche definito un caricamento "EAGER" per gli allegati per l'entità Messaggio.
Ora mi sarei aspettato che i messaggi che ottengo chiamando $customer->getMessages()
siano già caricati con tutti i loro allegati. Ma $message->getAttachments()
causa ancora un'istruzione SQL per messaggio.
È previsto questo comportamento?
Solo per riferimento, stralci di miei corsi:
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;
Penso che questo è stato realizzato prima in Dottrina 2.5. Sospetto che tu stia usando 2.4? – Cerad
Sì, sto usando 2.4. Quindi dovrò aggirare quel problema per ora. – Jens