Как эффективно считать связанные строки в модели, используя Doctrine2 - PullRequest
10 голосов
/ 14 декабря 2011

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

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

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

Например

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

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

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

1 Ответ

19 голосов
/ 15 декабря 2011

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

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

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

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

О дополнительных ленивых коллекциях вы можете прочитать здесь: http://www.doctrine -project.org / документы / ОРМ / 2,1 / о / учебники / экстра-ленивого-associations.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...