Doctrine orm 如何使用Doctrine2有效地计算模型中的相关行

Doctrine orm 如何使用Doctrine2有效地计算模型中的相关行,doctrine-orm,Doctrine Orm,我对条令很陌生,想知道如何有效地计算特定模型对象的相关对象的数量 我读到在模型中使用实体管理器不是一个好主意,因此我想知道如何查询数据库以找出答案,而不延迟加载所有相关模型并进行计数() 我还没有找到一个很好的答案,但这似乎是一个非常基本的问题 比如说 class House { /** * @var Room */ protected $rooms public function getRoomCount() { // Ca

我对条令很陌生,想知道如何有效地计算特定模型对象的相关对象的数量

我读到在模型中使用实体管理器不是一个好主意,因此我想知道如何查询数据库以找出答案,而不延迟加载所有相关模型并进行计数()

我还没有找到一个很好的答案,但这似乎是一个非常基本的问题

比如说

class House
{
    /**
     * @var Room
     */
    protected $rooms

    public function getRoomCount()
    {
        // Cant use entity manager here?
    }
}

class Room
{
    // Shed loads of stuff in here
}

条令2将自动为您获取计数,因为关联属性实际上是条令集合对象:

public function getRoomCount() 
{
    return $this->rooms->count();
}
如果将关联标记为“渴望”,则无论何时查询房屋实体,Doctrine都会加载房间。如果将它们标记为lazy(默认设置),则在实际访问
$this->rooms
属性之前,Doctrine不会加载文件室

从原则2.1开始,您可以将关联标记为额外懒惰。这意味着调用
$This->rooms->count()
不会加载房间,它只会向数据库发出
count
查询


你可以在这里阅读关于额外懒惰收藏的内容:

啊,很好,我马上去看看。我实际上也只使用了Doctrine 2.0,所以可能还需要更新我的代码。我刚刚认识到可以直接使用count($house->getRooms())。这将正确添加单个计数查询。另请参见:向其中添加WHERE的最佳方法是什么?i、 例如,计算容量大于2或类似的房间数?在这个问题上苦苦挣扎。@JacobManser我不再是最新的教义,但看起来你可以在这里找到答案: