有三个实体:客户,消息,附件.
这些实体之间的关系是直截了当的:客户可以拥有许多消息,而消息可以包含许多附件.这两种关系都是"一对多".
我在加载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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
Attachment.php:
class Attachment
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * …Run Code Online (Sandbox Code Playgroud) 能够进入dev my-[tab]我系统上的任何地方并接收自动完成,例如
$ dev my-[tab]
my-project
my-awesome-project
Run Code Online (Sandbox Code Playgroud)
我创建了一个包含/etc/bash_completion.d/以下内容的文件:
_dev()
{
    PROJECTS=$(ls /development)
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "${PROJECTS}" -- $cur) )
}
complete -F _dev dev
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我也希望能够自动完成子文件夹:
[~] $ dev my-p[tab]
[~] $ dev my-project/[tab][tab]
src    doc
[~] $ dev my-project/s[tab][enter]
[/development/my-project/src] $
Run Code Online (Sandbox Code Playgroud)
所以基本上,我希望以dev与cd.
dev 只是一个别名:
alias dev='gotodev'
gotodev ()
{ 
    cd /development/$1
}
Run Code Online (Sandbox Code Playgroud)