Php ApiGility-返回自定义集合

Php ApiGility-返回自定义集合,php,zend-framework2,laminas-api-tools,Php,Zend Framework2,Laminas Api Tools,我的目标是返回findAll()查询的自定义集合,并将其传递给HAL,以确保其\u链接的格式正确。我原本以为我会简单地以编程的方式来做这件事,但这似乎是错误的做法 我面临的问题是,我需要的数据不是来自一个表,而是来自多个表(联接),我无法确定如何正确地做到这一点 我拥有以下实体: Stone entity:一个标准表,其中包含一些我想在提要中返回的属性的连接 /** * @var integer * * @ORM\Column(name="id", type="in

我的目标是返回
findAll()
查询的自定义集合,并将其传递给HAL,以确保其
\u链接的格式正确。我原本以为我会简单地以编程的方式来做这件事,但这似乎是错误的做法

我面临的问题是,我需要的数据不是来自一个表,而是来自多个表(联接),我无法确定如何正确地做到这一点

我拥有以下实体:

Stone entity:一个标准表,其中包含一些我想在提要中返回的属性的连接

/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="Stone\Entity\StAttribute")
     * @ORM\JoinTable(name="st_stone_attribute",
     *      joinColumns={@ORM\JoinColumn(name="stone_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="attribute_id", referencedColumnName="id")}
     * )
     *
     * @var Collection
     * @access private
     */
    private $attribute;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=50, nullable=false)
     */
    private $name;

etc...
属性实体是一个标准表:

/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=30, nullable=false)
     */
    private $name;
我的资源调用:

public function fetchAll($params = array())
    {
        return $this->stoneMapper->fetchAll();
    }
public function fetchAll()
{
    $qb   = $this->stoneRepository->createQueryBuilder('u')
        ->where('u.state=:state')
        ->setParameter('state' , 1 );

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

    return $collection;
}
我的映射程序文件:

public function fetchAll($params = array())
    {
        return $this->stoneMapper->fetchAll();
    }
public function fetchAll()
{
    $qb   = $this->stoneRepository->createQueryBuilder('u')
        ->where('u.state=:state')
        ->setParameter('state' , 1 );

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

    return $collection;
}
我的收藏

use Zend\Paginator\Paginator;

class StoneCollection extends Paginator
{

}
结果的屏幕截图如下:

正如您从屏幕截图中看到的,“属性”和其他类似字段没有被填充


因此,我的问题是:如何确保在提要中填充联接表?

您需要获取联接关联。您可以在条令2文档中了解这一点

在您的情况下,它将如下所示:

$qb = $this->stoneRepository->createQueryBuilder('s')
    ->addSelect('a')
    ->leftJoin('s.attribute', 'a')
    ->where('s.state = :state')
    ->setParameter('state' , 1 );
MetadataMap
中,还需要为您的
StatAttribute
设置一个or,否则应该实现一些代码来提取
StatAttribute
属性

当然,您也可以在fetch方法本身中这样做,但这并不是很好


如果您不将对象提取或转换为可以序列化为有效json格式的内容(一个
Hal
资源或集合实例,一个(json)字符串或一个
JsonSerializable
),对象将继续呈现为
{}

嘿,您有什么解决方案吗?@JimitShah我回答了这个问题。这可能对你有帮助。