gpt4 book ai didi

doctrine-orm - Doctrine - 如何在使用查询生成器时补充集合

转载 作者:行者123 更新时间:2023-12-04 04:18:26 24 4
gpt4 key购买 nike

A previous question I asked与使用 Doctrine 和查询生成器时对结果集进行水化有关。我的问题是如何返回数组及其子集:

这是针对单个结果集的,答案很简单:

    $qb = $this->stoneRepository->createQueryBuilder('S');

$query = $qb->addSelect('A','P','I','C')
->leftJoin('S.attribute', 'A')
->leftJoin('A.category', 'C')
->innerJoin('S.product' , 'P')
->innerJoin('S.image' , 'I')
->where('S.id = :sid')
->setParameter('sid', (int) $stone_id)
->getQuery();

$resultArray = $query->getOneOrNullResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

return $resultArray;

我的下一个问题是如何为集合做同样的事情?这是我尝试过的:

public function fetchAll()
{
$qb = $this->stoneRepository->createQueryBuilder('S');

$qb->addSelect('A','P','I','C')
->leftJoin('S.attribute', 'A')
->leftJoin('A.category', 'C')
->innerJoin('S.product' , 'P')
->innerJoin('S.image' , 'I')
->where('S.state=:state')
->setParameter('state' , 1 );

$adapter = new DoctrineAdapter( new ORMPaginator( $qb ) );
$collection = new StoneCollection($adapter);

return $collection;
}

我在使用此解决方案时遇到的问题是未填充连接表,我最终得到的是一组空结果。

StoneCollection 类简单地扩展了分页器:

<?php
namespace Api\V1\Rest\Stone;

use Zend\Paginator\Paginator;

class StoneCollection extends Paginator
{

}

我在想,也许最好的方法是获取一个数组并对该数组进行分页?

编辑::

我有这个工作,虽然我不喜欢它,因为我两次点击数据库。第一次构建数组(这是整个结果集,对于某些应用程序来说可能非常大),然后第二次对结果进行分页,然后返回到 ApiGility 中的 HAL 进行处理...

理想情况下,这应该一次性完成,但我不确定如何在单个实例中对结果进行水化......

public function fetchAll( $page = 1 )
{
$qb = $this->stoneRepository->createQueryBuilder('S');

$qb->addSelect('A','P','I','C')
->leftJoin('S.attribute', 'A')
->leftJoin('A.category', 'C')
->innerJoin('S.product' , 'P')
->innerJoin('S.image' , 'I')
->where('S.state=:state')
->setParameter('state' , 1 );

$resultArray = $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

$paginator = new \Zend\Paginator\Paginator(new \Zend\Paginator\Adapter\ArrayAdapter($resultArray));
$paginator->setCurrentPageNumber($page);

return $paginator;
}

最佳答案

这个问题的答案如上:

我有这个工作,虽然我不喜欢它,因为我两次点击数据库。第一次构建数组(这是整个结果集,对于某些应用程序来说可能非常大),然后第二次对结果进行分页,然后返回到 ApiGility 中的 HAL 进行处理...

理想情况下,这应该一次性完成,但我不确定如何在单个实例中对结果进行水化......

public function fetchAll( $page = 1 )
{
$qb = $this->stoneRepository->createQueryBuilder('S');

$qb->addSelect('A','P','I','C')
->leftJoin('S.attribute', 'A')
->leftJoin('A.category', 'C')
->innerJoin('S.product' , 'P')
->innerJoin('S.image' , 'I')
->where('S.state=:state')
->setParameter('state' , 1 );

$resultArray = $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

$paginator = new \Zend\Paginator\Paginator(new \Zend\Paginator\Adapter\ArrayAdapter($resultArray));
$paginator->setCurrentPageNumber($page);

return $paginator;
}

关于doctrine-orm - Doctrine - 如何在使用查询生成器时补充集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com