Как эффективно подсчитывать связанные строки в модели с помощью Doctrine2

Я новичок в Doctrine и задаюсь вопросом, как эффективно вычислить количество связанных объектов для определенного объекта модели.

Я читал здесь, что это не отличная идея использовать диспетчер сущности в моделях, поэтому мне интересно, как я буду запрашивать базу данных, чтобы узнать без ленивой загрузки все связанные модели и делать count().

Я пока еще не нашел отличного ответа, но похоже, что это довольно фундаментальная вещь?

Например

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

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

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

Ответ 1

Doctrine 2 будет автоматически рассчитываться для вас, поскольку свойства ассоциации фактически являются объектами коллекции Doctrine:

public function getRoomCount() 
{
    return $this->rooms->count();
}

Если вы отметите связь как нетерпеливую, Doctrine будет загружать комнаты всякий раз, когда вы запрашиваете домашние объекты. Если вы отметите их как ленивые (по умолчанию), Doctrine не будет загружать комнаты, пока вы не получите доступ к свойству $this->rooms.

В соответствии с Доктриной 2.1 вы можете отметить ассоциации как лишние лени. Это означает, что вызов $this->rooms->count() не будет загружать комнаты, он просто выдает запрос COUNT в базу данных.

Здесь вы можете прочитать о дополнительных ленивых коллекциях: http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html