Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用API平台在多个不同表中创建多个条目

使用API平台在多个不同表中创建多个条目
EN

Stack Overflow用户
提问于 2018-12-27 08:47:06
回答 1查看 2.3K关注 0票数 1

我正在为Symfony REST使用API平台。我只搜索一条路径,在几个不同的表中添加多个数据,因此是几个实体。这是我想去的路:

/api/订单

代码语言:javascript
运行
AI代码解释
复制
<?php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

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

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $origin;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $destination;

    /**
     * @ORM\Column(type="string", length=50)
     */
    private $idTrackingMerchant;

    /**
     * @ORM\Column(type="string", length=50)
     */
    private $idTrackingA;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\OrderHistory", mappedBy="orderId")
     */
    private $orderHistories;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Customer", inversedBy="orders")
     * @ORM\JoinColumn(nullable=false)
     */
    private $customer;

    /**
     * @ORM\Column(type="integer")
     */
    private $weightMerchant;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $weightReal;

    /**
     * @ORM\Column(type="integer")
     */
    private $taxeOctroi;

    /**
     * @ORM\Column(type="integer")
     */
    private $taxeOctroiRegional;

    /**
     * @ORM\Column(type="integer")
     */
    private $taxeTva;

    /**
     * @ORM\Column(type="integer")
     */
    private $taxeOctroiMerchant;

    /**
     * @ORM\Column(type="integer")
     */
    private $taxeOctroiRegionalMerchant;

    /**
     * @ORM\Column(type="integer")
     */
    private $taxeTvaMerchant;

    /**
     * @ORM\Column(type="datetime")
     */
    private $date_add;

    /**
     * @ORM\Column(type="datetime")
     */
    private $date_upd;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\OrderDetail", mappedBy="orderId")
     */
    private $orderDetails;

    /**
     * Order constructor.
     */
    public function __construct()
    {
        $this->date_add = new \DateTime();
        $this->date_upd = new \DateTime();
        $this->orderHistories = new ArrayCollection();
        $this->orderDetails = new ArrayCollection();
    }

    /**
     * @return int|null
     */
    public function getId(): ?int
    {
        return $this->id;
    }

    /**
     * @return null|string
     */
    public function getOrigin(): ?string
    {
        return $this->origin;
    }

    /**
     * @param string $origin
     * @return Order
     */
    public function setOrigin(string $origin): self
    {
        $this->origin = $origin;

        return $this;
    }

    /**
     * @return null|string
     */
    public function getDestination(): ?string
    {
        return $this->destination;
    }

    /**
     * @param string $destination
     * @return Order
     */
    public function setDestination(string $destination): self
    {
        $this->destination = $destination;

        return $this;
    }

    /**
     * @return null|string
     */
    public function getIdTrackingMerchant(): ?string
    {
        return $this->idTrackingMerchant;
    }

    /**
     * @param string $idTrackingMerchant
     * @return Order
     */
    public function setIdTrackingMerchant(string $idTrackingMerchant): self
    {
        $this->idTrackingMerchant = $idTrackingMerchant;

        return $this;
    }

    /**
     * @return null|string
     */
    public function getIdTrackingA(): ?string
    {
        return $this->idTrackingA;
    }

    /**
     * @param string $idTrackingA
     * @return Order
     */
    public function setIdTrackingA(string $idTrackingA): self
    {
        $this->idTrackingA = $idTrackingA;

        return $this;
    }

    /**
     * @return Collection|OrderHistory[]
     */
    public function getOrderHistories(): Collection
    {
        return $this->orderHistories;
    }

    /**
     * @param OrderHistory $orderHistory
     * @return Order
     */
    public function addOrderHistory(OrderHistory $orderHistory): self
    {
        if (!$this->orderHistories->contains($orderHistory)) {
            $this->orderHistories[] = $orderHistory;
            $orderHistory->setOrderId($this);
        }

        return $this;
    }

    /**
     * @param OrderHistory $orderHistory
     * @return Order
     */
    public function removeOrderHistory(OrderHistory $orderHistory): self
    {
        if ($this->orderHistories->contains($orderHistory)) {
            $this->orderHistories->removeElement($orderHistory);
            // set the owning side to null (unless already changed)
            if ($orderHistory->getOrderId() === $this) {
                $orderHistory->setOrderId(null);
            }
        }

        return $this;
    }

    /**
     * @return Customer|null
     */
    public function getCustomer(): ?Customer
    {
        return $this->customer;
    }

    /**
     * @param Customer|null $customer
     * @return Order
     */
    public function setCustomer(?Customer $customer): self
    {
        $this->customer = $customer;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getWeightMerchant(): ?int
    {
        return $this->weightMerchant;
    }

    /**
     * @param int $weightMerchant
     * @return Order
     */
    public function setWeightMerchant(int $weightMerchant): self
    {
        $this->weightMerchant = $weightMerchant;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getWeightReal(): ?int
    {
        return $this->weightReal;
    }

    /**
     * @param int|null $weightReal
     * @return Order
     */
    public function setWeightReal(?int $weightReal): self
    {
        $this->weightReal = $weightReal;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getTaxeTva(): ?int
    {
        return $this->taxeTva;
    }

    /**
     * @param int $taxeTva
     * @return Order
     */
    public function setTaxeTva(int $taxeTva): self
    {
        $this->taxeTva = $taxeTva;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getTaxeOctroi(): ?int
    {
        return $this->taxeOctroi;
    }

    /**
     * @param int $taxeOctroi
     * @return Order
     */
    public function setTaxeOctroi(int $taxeOctroi): self
    {
        $this->taxeOctroi = $taxeOctroi;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getTaxeOctroiRegional(): ?int
    {
        return $this->taxeOctroiRegional;
    }

    /**
     * @param int $taxeOctroiRegional
     * @return Order
     */
    public function setTaxeOctroiRegional(int $taxeOctroiRegional): self
    {
        $this->taxeOctroiRegional = $taxeOctroiRegional;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getTaxeTvaMerchant(): ?int
    {
        return $this->taxeTvaMerchant;
    }

    /**
     * @param int $taxeTvaMerchant
     * @return Order
     */
    public function setTaxeTvaMerchant(int $taxeTvaMerchant): self
    {
        $this->taxeTvaMerchant = $taxeTvaMerchant;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getTaxeOctroiMerchant(): ?int
    {
        return $this->taxeOctroiMerchant;
    }

    /**
     * @param int $taxeOctroiMerchant
     * @return Order
     */
    public function setTaxeOctroiMerchant(int $taxeOctroiMerchant): self
    {
        $this->taxeOctroiMerchant = $taxeOctroiMerchant;

        return $this;
    }

    /**
     * @return int|null
     */
    public function getTaxeOctroiRegionalMerchant(): ?int
    {
        return $this->taxeOctroiRegionalMerchant;
    }

    /**
     * @param int $taxeOctroiRegionalMerchant
     * @return Order
     */
    public function setTaxeOctroiRegionalMerchant(int $taxeOctroiRegionalMerchant): self
    {
        $this->taxeOctroiRegionalMerchant = $taxeOctroiRegionalMerchant;

        return $this;
    }

    /**
     * @return \DateTimeInterface|null
     */
    public function getDateAdd(): ?\DateTimeInterface
    {
        return $this->date_add;
    }

    /**
     * @return \DateTimeInterface|null
     */
    public function getDateUpd(): ?\DateTimeInterface
    {
        return $this->date_upd;
    }

    /**
     * @param \DateTimeInterface $date_upd
     * @return Order
     */
    public function setDateUpd(\DateTimeInterface $date_upd): self
    {
        $this->date_upd = $date_upd;

        return $this;
    }

    /**
     * @return Collection|OrderDetail[]
     */
    public function getOrderDetails(): Collection
    {
        return $this->orderDetails;
    }

    /**
     * @param OrderDetail $orderDetail
     * @return Order
     */
    public function addOrderDetail(OrderDetail $orderDetail): self
    {
        if (!$this->orderDetails->contains($orderDetail)) {
            $this->orderDetails[] = $orderDetail;
            $orderDetail->setOrderId($this);
        }

        return $this;
    }

    /**
     * @param OrderDetail $orderDetail
     * @return Order
     */
    public function removeOrderDetail(OrderDetail $orderDetail): self
    {
        if ($this->orderDetails->contains($orderDetail)) {
            $this->orderDetails->removeElement($orderDetail);
            // set the owning side to null (unless already changed)
            if ($orderDetail->getOrderId() === $this) {
                $orderDetail->setOrderId(null);
            }
        }

        return $this;
    }
}

这个实体与实体OrderDetail和OrderHistory有关系,我必须将这2个实体添加到它们的表中。我如何在API平台上做到这一点?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-27 18:27:11

若要将嵌入实体保存在单个请求中,必须使用序列化程序组并启用级联持久化。

首先,将序列化程序组应用于order实体非嵌入式属性。

代码语言:javascript
运行
AI代码解释
复制
use Symfony\Component\Serializer\Annotation\Groups;

...

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 * @Groups("order")
 */
 private $id;

接下来,将组应用于嵌入的属性,并添加级联选项:

代码语言:javascript
运行
AI代码解释
复制
/**
 * @ORM\OneToMany(targetEntity="App\Entity\OrderDetail", mappedBy="orderId", cascade={"persist", "remove"})
 * @Groups("order:order_detail")
 */
 private $orderDetails;

接下来,将组应用于嵌入的实体属性:

代码语言:javascript
运行
AI代码解释
复制
public class OrderDetail {

/**
 * ...
 * @Groups("order_detail")
 */
 private $id;

 ...

}

并将它们添加到序列化上下文中,如果您不希望在检索数据时嵌入它们,则可以从normalizationContext中删除组

代码语言:javascript
运行
AI代码解释
复制
/**
 * @ApiResource(
 *  normalizationContext={"groups"={"order", "order:order_detail", "order_detail"}},
 *  denormalizationContext={"groups"={"order", "order:order_detail", "order_detail"}}
 *)
 * @ORM\Entity(repositoryClass="App\Repository\OrderRepository")
 */
class Order {  }

现在,您可以使用一个请求保存它:

代码语言:javascript
运行
AI代码解释
复制
POST /orders
{
  ...
  orderDetails: [{ "myProperty": "myValue", ... }]
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53948270

复制
相关文章
在一台Apache服务器上创建多个站点(不同域名)
使用不同的域名来区分不同的网站,所有的域名解析都指向同一个 IP 地址。Apache通过在HTTP头中附带的 host参数来判断用户需要访问哪一个网站。
星哥玩云
2022/07/14
3.5K0
vagrantfile创建多个Host
对vagrantfile配置参数感兴趣的可以移步这里学习哈!vagrantfile配置参数
友儿
2022/09/13
9580
Excel小技巧54: 同时在多个工作表中输入数据
很多情形下,我们都需要在多个工作表中有同样的数据。此时,可以使用Excel的“组”功能,当在一个工作表中输入数据时,这些数据也被同时输入到其它成组的工作表中。
fanjy
2020/09/10
3.6K0
Excel小技巧54: 同时在多个工作表中输入数据
使用Python pandas读取多个Excel工作表
本文将尝试使用Python pandas读取来自同一文件的多个Excel工作表。我们可以通过两种方式来实现这一点:使用pd.read_excel()方法,并使用可选的参数sheet_name;另一种方法是创建一个pd.ExcelFile对象,然后解析该对象中的数据。
fanjy
2021/11/10
13.6K0
使用Python pandas读取多个Excel工作表
一文解决多个不同平台差异分析结果合并
原因:随着技术平台的不断发展,许多已发布的实验数据集可以被不同统计方法整合,使得可以同时使用各种方法来解决同一研究问题。但是为了从所有这些选择中获得最大的收益,我们需要以公正的方式整合它们的结果,例如不同实验的差异分析结果。优先排序的基因列表是基因组数据分析应用程序中常见的结果表示方法。因此,秩聚合方法可以成为这一类问题的有用且通用的解决方案。
用户1359560
2019/10/08
4.3K0
一文解决多个不同平台差异分析结果合并
JS创建多个下载任务
//JS创建多个下载任务 function Down() { //文件名 var namearr = []; //文件路径 var hrefarr = []; $(".downs .col-md-4").each(function (index, item) { namearr.push(需要下载的文件名); hrefarr.push(需要下载的文件路径); }) for (var index = 0; index <
小语雀网
2022/05/06
12.3K0
mysql单个表拆分成多个表
一.横向拆分 create table 新表的名称 select * from 被拆分的表 order by id limit int1,int2 int1为其实位置,int2为几条 注意:这样拆分后主键会失效手动让其主键生效即可所有要执行 alter table 新表的名称 modify 主键字段 int primary key auto_increment 二.纵向拆分 create table 新表的名称 select 需保留的字段 from 被拆分的表 拆分后原表都要保存 主要是把经常查的数据
小小咸鱼YwY
2020/06/19
4K0
100 多个常用 API 接口
http://apistore.baidu.com/apiworks/servicedetail/114.html
灰太狼学Java
2022/06/17
1.1K0
VBA创建多个数据源的数据透视表
比如要分析工资的数据,工资表是按月分了不同Sheet管理的,现在需要把12个月的数据放到一起创建1个数据透视表。
xyj
2020/07/28
3.6K0
VBA创建多个数据源的数据透视表
Excel公式练习43: 统计满足多个条件的条目数量
导语:继续研究来自于excelxor.com的案例。这个案例与之前相比并不复杂,但要求公式最简。
fanjy
2020/02/29
2.7K0
WinDBG 使用多个路径下的符号表
在开发调试问题的过程中,我们经常使用 WinDBG 来调试崩溃、卡死或蓝屏的 Dump 文件,调试时我们需要将微软的符号表路径导入到 WinDBG 中,也需要将自己程序的符号表文件导入到 WinDBG 中,这样看 Dump 才一清二楚。导入多个符号表的方法就是在每个符号表路径后增加一个分号 ; 然后紧接着下一个符号表路径。
我与梦想有个约会
2023/10/21
3560
WinDBG 使用多个路径下的符号表
在MapReduce中利用MultipleOutputs输出多个文件
用户在使用Mapreduce时默认以part-*命名,MultipleOutputs可以将不同的键值对输出到用户自定义的不同的文件中。
星哥玩云
2022/07/03
2.3K0
在MapReduce中利用MultipleOutputs输出多个文件
如何在 wxPython 中创建多个工具栏
作为C++库wxWidgets的包装器,wxPython允许Python开发人员利用这个成熟且经过实战测试的框架的强大功能。它具有各种平台的本机外观和感觉,包括Windows,macOS和Linux。使用 wxPython,您可以使用各种小部件(例如按钮、文本控件,当然还有工具栏)设计具有视觉吸引力且响应迅速的桌面应用程序。
很酷的站长
2023/08/11
5610
如何在 wxPython 中创建多个工具栏
replaceAll()如何同时替换多个不同的字符串(或多个符号)
正好我遇到过这个情况,就跟她分享了一下心得,解决问题后的她开心的像刚充完气儿一样。
陈哈哈
2020/07/03
5.9K0
git的使用(gitlab、github ssh拉取文件,拉取多个平台多个账号)
ssh-keygen -t rsa -C 'xxx@xxx.com' (表示你的邮箱)
gfu
2019/08/28
2.5K0
git的使用(gitlab、github ssh拉取文件,拉取多个平台多个账号)
在centOS使用systemctl配置启动多个tomcat
公司服务器使用的是阿里云CentOS7,CentOS7和CentOS6目前最大区别就是service变成了现在的systemctl,简单的查了一下并结合使用,发现systemctl功能上等同于6上面的service+chkconfig,也就是说配置service与设置开机启动都是使用systemctl。
陈灬大灬海
2018/12/24
2K0
如何使用 Vue 命名插槽创建多个模板插槽?
这是最基本的示例,如果我们不提供父级的任何slot 内容,则我们将<slot>放在其中的任何内容都会作为后备内容。
前端小智@大迁世界
2022/06/15
2.9K0
如何使用 Vue 命名插槽创建多个模板插槽?
Swift桥接下创建多个target,打包不同版本的target坑
xxx-Swift.h错误问题 打不同版本的target包 坑 项目中使用了Swift版本的图表库Charts,导致在不同的target下需要使用不同的-Swift.h桥接 #import "IComeTest-Swift.h" #import "ICome-Swift.h" #import "IComeDebug-Swift.h" #import "ICome-Swift.h" 处理方案:配置Build Settings --> Preprocessor Macros, 在不同的target下导入不同的头
程序员不务正业
2018/06/14
2.2K3
vim打开多个文件、同时显示多个文件、在文件之间切换 打开多个文件:
1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开一个文件,并且此时vim里会显示出file文件的内容。
sunsky
2020/08/19
15.8K0
Excel公式技巧17: 使用VLOOKUP函数在多个工作表中查找相匹配的值(2)
我们给出了基于在多个工作表给定列中匹配单个条件来返回值的解决方案。本文使用与之相同的示例,但是将匹配多个条件,并提供两个解决方案:一个是使用辅助列,另一个不使用辅助列。
fanjy
2020/03/12
14.9K0

相似问题

在多个表php pdo中插入多个条目

10

在多个表中创建多个元组

11

如何使用多个条目创建绘图

26

从表中获取多个条目

12

使用多个条件创建多个表

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档