scorpion-ds
Новичок
Не понимаю, почему я раньше не сталкивался с такой проблемой ...
Столкнулся с проблемой, что если делаю запрос в репозитории к таблице у которой есть связи и связанные объекты явно запрашиваются, то ограничение setMaxResults действует не только на родителя, но и на дочерние объекты. К примеру, если Messages в выборке у меня 10, но есть еще дочерние объекты MessageCustomer, которых скажем 3 на все Messages, то я получу только 7 результатов по родительскому объекту. Я не понимаю почему setMaxResults действует на все связанные сущности, а не только на родительскую.
Если я уберу явную связь и будет использоваться "ленивая загрузка", то будет масса лишних запросов, но все будет работать как надо.
Фрагмент кода, он порезан немного, что бы не отвлекать от сути вопроса:
	
	
	
		
								Столкнулся с проблемой, что если делаю запрос в репозитории к таблице у которой есть связи и связанные объекты явно запрашиваются, то ограничение setMaxResults действует не только на родителя, но и на дочерние объекты. К примеру, если Messages в выборке у меня 10, но есть еще дочерние объекты MessageCustomer, которых скажем 3 на все Messages, то я получу только 7 результатов по родительскому объекту. Я не понимаю почему setMaxResults действует на все связанные сущности, а не только на родительскую.
Если я уберу явную связь и будет использоваться "ленивая загрузка", то будет масса лишних запросов, но все будет работать как надо.
Фрагмент кода, он порезан немного, что бы не отвлекать от сути вопроса:
		PHP:
	
	public function getMessagesAccount(
        Account $account,
        array $filters = [],
        string $search = null,
        string $sortField = null,
        string $sortOrder = null,
        int $offset = 0,
        int $limit = null,
        bool $notActivity = null,
        int $customerId = null,
        bool $isOpen = null,
        bool $isDownloaded = null,
        $hydrationMode = AbstractQuery::HYDRATE_OBJECT
    )
    {
        $qb = $this->createQueryBuilder('m')
            ->select('m')
        ;
        
        $qb
            ->innerJoin('CPMessageBundle:MessageCustomer', 'mc', 'WITH', 'mc.message = m.id')
            //->join('CPCustomerBundle:Customer', 'c', 'WITH', 'c.id = mc.customer')
            //->leftJoin('CPDocumentBundle:Link', 'l', 'WITH', 'l.messageCustomer = mc.id')
            //->leftJoin('CPFilesBundle:FileLink', 'fl', 'WITH', 'fl.messageCustomer = mc.id')
            //->leftJoin('CPUrlBundle:UrlLink', 'url_link', 'WITH', 'url_link.messageCustomer = mc.id')
        ;
        $qb
            ->where($qb->expr()->eq('m.account', ':account'))
            ->setParameter('account', $account->getId())
        ;
        // Filters <<
        $this->andFilters($qb, 'm', $filters);
        // Filters >>
        // Sorting <<
        $this->sorting($qb, 'm', $sortField, $sortOrder);
        // Sorting >>
        if(!empty($limit))
        {
            $qb
                ->setFirstResult($offset)
                ->setMaxResults($limit)
            ;
        }
        
        return $qb->getQuery()->getResult($hydrationMode); 
	            
