我对Doctrine很新,并且想知道如何有效地计算特定模型对象的相关对象的数量。
我读到here在模型中使用实体管理器并不是一个好主意所以我想知道如何在不延迟加载所有相关模型并进行计数的情况下查询数据库以查找( )。
我还没有真正找到一个好的答案,但这似乎是一个非常基本的东西?
例如
class House
{
/**
* @var Room
*/
protected $rooms
public function getRoomCount()
{
// Cant use entity manager here?
}
}
class Room
{
// Shed loads of stuff in here
}
答案 0 :(得分:19)
Doctrine 2将自动获取计数,因为关联属性实际上是Doctrine Collection对象:
public function getRoomCount()
{
return $this->rooms->count();
}
如果您将关联标记为渴望,则每当您查询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