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

chr*_*acp 10 doctrine-orm

我对Doctrine很新,并且想知道如何有效地计算特定模型对象的相关对象的数量.

在这里读到,在模型中使用实体管理器并不是一个好主意,所以我想知道如何在不延迟加载所有相关模型并执行count()的情况下查询数据库.

我还没有真正找到一个好的答案,但似乎这是一个非常基本的东西?

例如

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

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

class Room
{
    // Shed loads of stuff in here
}
Run Code Online (Sandbox Code Playgroud)

roj*_*oca 19

由于关联属性实际上是Doctrine Collection对象,因此Doctrine 2会自动获取计数:

public function getRoomCount() 
{
    return $this->rooms->count();
}
Run Code Online (Sandbox Code Playgroud)

如果您将关联标记为渴望,则每当您查询house实体时,Doctrine都会加载房间.如果您将它们标记为延迟(默认值),则在您实际访问该$this->rooms属性之前,Doctrine将不会加载房间.

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

你可以在这里阅读有关额外的懒惰集合:http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html