php - Api 平台 : Eager Loading a Subresource

标签 php rest symfony symfony4 api-platform.com

大家好,我刚开始使用 Api-Platform,我被这个问题困了几个小时。

我有一个 Symfony4 项目和两个实体:Bill & Abo

比尔:

/**
 * @ORM\Entity(repositoryClass="App\Repository\BillRepository")
 * @ApiResource
 */
class Bill {
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="date", nullable=false)
     */
    private $date;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Abo", inversedBy="bills")
     * @ORM\JoinColumn
     * @ApiSubresource
     */
    private $abo;
}

阿博:

/**
 * @ORM\Entity(repositoryClass="App\Repository\AboRepository")
 * @ApiResource
 */
class Abo
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @var integer
     *
     * @ORM\Column(name="price", type="integer", nullable=false)
     */
    private $price;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Bill", mappedBy="abo")
     */
    private $bills;
}

当我现在调用这个 url /api/bills 时,我得到了这个数据:

{
  "@id": "/api/bills/14",
  "@type": "Bill",
  "id": 14,
  "date": "2018-03-08T00:00:00+00:00",
  "abo": "/api/abos/1"
},
...

但不是这个 "abo": "/api/abos/1" 我想要 Abo 数据已经加载,像这样:

"abo": {
    "name": "TestAbo",
    "price": 25
}

这可能吗?如果可以,我该如何实现?

感谢您的宝贵时间和帮助!

最佳答案

您可以为此使用序列化组。确保您的关系字段 $abo 及其成员字段组已公开。

use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity(repositoryClass="App\Repository\BillRepository")
 * @ApiResource(attributes={
 *   "normalization_context"={"groups"={"bill", "bill-abo", "abo"}}
 * })
 */
class Bill {

  ...

  /**
   * @ORM\ManyToOne(targetEntity="App\Entity\Abo", inversedBy="bills")
   * @ORM\JoinColumn
   * @ApiSubresource
   * @Groups("bill-abo")
   */
   private $abo;

   ...

}

class Abo {

    ...

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

    ...
}

您可以在 docs 中阅读更多内容.

关于php - Api 平台 : Eager Loading a Subresource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50852130/

相关文章:

php - 从mysql获取结果并将每个结果应用到变量并最终输出

php - MYSQL中Case语句中AND的使用

php - register_shutdown_function 覆盖

json - 为什么仅为 POST 请求/201(已创建)响应设置 HTTP 位置 header ?

rest - REST API的稳定性测试

symfony - TailwindCSS 3 + Symfony/webpack Encore 没有样式?

php - 使用PHP脚本修改yaml文件

php - 我如何配置 Msmtp 以使用 gmail SMTP

python - 自然语言处理 : text corpus format for word2vec

php - 如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作