有三个实体:客户,消息,附件。
这些实体之间的关系是直截了当的:客户可以拥有许多消息,而消息可以包含许多附件。这两种关系都是“一对多”。
我在加载Customer实体的消息时告诉doctrine是懒惰的。所以 $customer->getMessages()
导致一个额外的SQL语句。没关系。
但我还为Message实体的附件定义了“EAGER”加载。
现在我希望通过调用获得的消息 $customer->getMessages()
已经加载了所有附件。但 $message->getAttachments()
仍然会为每条消息生成一个SQL语句。
这种行为有望吗?
仅供参考,我的课程除外:
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;