我对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
| 归档时间: |
|
| 查看次数: |
6584 次 |
| 最近记录: |