Doctrine orm Doctrine2是否会选择所有关联(来自查询的联接)上的所有字段来填充完整聚合对象?

Doctrine orm Doctrine2是否会选择所有关联(来自查询的联接)上的所有字段来填充完整聚合对象?,doctrine-orm,aggregation,Doctrine Orm,Aggregation,我正在研究是否尝试博士2。有一件事令我害怕的是过度选择我不需要的列(例如,考虑不必要地选择很多VARCHARS)。p> 您可能会问:但是您不想填充完整的实体对象吗?是的,除非我在找一个数组。但是,很多时候我不需要填充完整的聚合。以下面显示的关联为例。如果我用一个JOIN-on-Address查询Users表,那么地址表中的所有列是否也会被选中(并因此填充到Users对象内部的Address对象中)?现在想象我们有更多的连接。这可能会变得非常糟糕。如果我只想在一个仅限用户的对象中填充来自用户的字段

我正在研究是否尝试博士2。有一件事令我害怕的是过度选择我不需要的列(例如,考虑不必要地选择很多VARCHARS)。p> 您可能会问:但是您不想填充完整的实体对象吗?是的,除非我在找一个数组。但是,很多时候我不需要填充完整的聚合。以下面显示的关联为例。如果我用一个JOIN-on-Address查询Users表,那么地址表中的所有列是否也会被选中(并因此填充到Users对象内部的Address对象中)?现在想象我们有更多的连接。这可能会变得非常糟糕。如果我只想在一个仅限用户的对象中填充来自用户的字段,该怎么办?我想我对Doctrine在幕后用关联和查询连接做什么有点困惑

/** @Entity **/
class User
{
    // ...

    /**
     * @ManyToOne(targetEntity="Address")
     * @JoinColumn(name="address_id", referencedColumnName="id")
     **/
    private $address;
}

/** @Entity **/
class Address
{
    // ...
}

Doctrine2是否会在查询后填充聚合中所有对象的所有字段(除非我指定了
partial
)?

这取决于您的查询,但通常不是隐式的。 使用查询生成器,可以如下方式获取关联的记录:

<?php
$qb = $em->createQueryBuilder();
$query = $qb->select(array("u", "a"))
        ->from("User", "u")
        ->innerJoin("u.address", "a")
        ->getQuery();

是。如果使用显式联接进行查询,则默认情况下,条令将填充所有字段。可以使用“部分”来选择字段。学说的重点是物体,部分含水的物体会引起问题。请记住,对于大型报告类型的查询,您总是可以直接使用sql。是的,这令人不安。考虑到我有VARCHARS和文本字段,我并不总是需要(现在想象乘以其他关联和它们的文本字段)。但我想这并不是完全令人不安,因为真的没有办法在这里吃我的蛋糕,也没有办法让它吃。如果你想让你的评论成为一个答案,我可以接受。啊,这很清楚,也很有意义。非常感谢。所以我猜你的应用程序中接受这个用户域对象的区域应该知道,使用它的关联数据可能会有问题?由于您可能会导致数据库在不知情的情况下进行查询,我认为这可能会导致一些快速和松散的编程,或者您的服务必须格外小心(当您必须思考/编写代码来解决此问题时,这种博士式的方便似乎没有带来多少好处)。最好只提供两种风格:硬对象集合(非常深入)和数组。但是,如果要创建多个联接表,则必须小心。一般来说,我会记录SQL查询,这样就很容易发现性能问题,因为Doctrine执行了大量的查询