我有一个名为提交
内容的实体类型。提交与
SurveyData
实体类型具有一对一关系。
SurveyData 实体实际上是一个映射的超类。它最终将有几十个用于存储来自不同调查数据的实体子类。
根据文档,我创建了一个自定义规范化器,它基于类型
键处理非规范化:
public function denormalize($data, string $type, string $format = null, array $context = [])
{
if ($type === 'App\Entity\SurveyData\SurveyData') {
$class = 'App\Entity\SurveyData\\' . $data['type'];
$context['resource_class'] = $class;
}
$context[self::ALREADY_CALLED] = true;
return $this->denormalizer->denormalize($data, 'App\Entity\SurveyData\\' . $data['type'], $format, $context);
}
有了这个,我可以完美地创建一个嵌入了SurveyData的新提交。下面是我发送给POST请求的JSON示例:
{
"facility": "/api/facilities/1",
"survey": "/api/surveys/monthly_totals",
"dateDetail": "Q1 2020",
"surveyData": {
"type": "MonthlyTotals",
"num_deliveries": 50,
"num_cesarean": 30,
"num_epidural_anesthesia": 15
},
"created": "2020-08-14T18:59:49.218Z",
"updated": "2020-08-14T18:59:49.218Z",
"user": "brian",
"status": "complete"
}
但是,当我通过 GET 获取集合或单个提交实体时,API 平台返回的响应忽略了将 @id
属性添加到嵌入式调查响应中。我不确定这是否是因为它是一个不能为空的一对一,所以它在内部被跟踪:
{
"@id": "/api/submissions/2",
"@type": "Submission",
"id": 2,
"facility": "/api/facilities/1",
"survey": "/api/surveys/monthly_totals",
"dateDetail": "Q1 2020",
"created": "2020-08-14T18:59:49+00:00",
"updated": "2020-08-14T18:59:49+00:00",
"user": "brian",
"status": "complete",
"surveyData": {
"num_deliveries": 50,
"num_cesarean": 30,
"num_epidural_anesthesia": 15
}
}
真正的问题是PUT
和PATCH
请求失败。
对于< code>PATCH请求,我可以更新父提交实体中的字段。但是,如果我发送以下请求,Submission和SurveyData实体将从数据库中删除,并且我会从API中得到以下错误:
“实体应用\\实体\\Submission@000000002116ebc30000000012ca4827不受管理。如果实体从数据库中获取或通过 EntityManager#persist 注册为新实体,则对其进行管理“,
整个反应的要点包括一个痕迹:https://gist.github.com/brianV/c32661186c91b49b013017dde77d5d4a
下面是一个触发错误的< code>PATCH请求的示例:
{
"user": "brian",
"surveyData": {
"type": "MonthlyTotals",
"num_deliveries": 100
}
}
每个PUT请求也会发生这种情况(其中我包括了整个替换提交实体)。
简单的Symfony
根据注释请求,以下是提交
实体注释:
/**
* @ApiResource(
* normalizationContext={"groups"={"submission"}},
* denormalizationContext={"groups"={"submission"}},
* itemOperations={
* "get"={
* "method"="GET",
* "access_control"="is_granted('view', object)",
* },
* "put", "patch", "delete",
* },
* )
* @ORM\Entity(repositoryClass="App\Repository\SubmissionRepository")
* @CustomAssert\SubmissionDataIsValid
*/
class Submission
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups({"submission"})
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Facility")
* @ORM\JoinColumn(nullable=false)
* @Groups({"submission"})
*/
private $facility;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Patient", inversedBy="submissions")
* @Groups({"submission"})
*/
private $patient;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"submission"})
*/
private $survey;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"submission"})
*/
private $dateDetail;
/**
* @ORM\Column(type="datetime")
* @Assert\Type("\DateTimeInterface")
* @Groups({"submission"})
*/
private $created;
/**
* @ORM\Column(type="datetime")
* @Assert\Type("\DateTimeInterface")
* @Groups({"submission"})
*/
private $updated;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"submission"})
*/
private $user;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"submission"})
*/
private $status;
/**
* @ORM\OneToOne(targetEntity="App\Entity\SurveyData\SurveyData", inversedBy="submission", cascade={"persist", "remove"}, orphanRemoval=true, fetch="EAGER")
* @Groups({"submission"})
*/
private $surveyData;
提前感谢任何帮助!
确保使用api_platform.jsonld.normalizer对
服务。SurveyData
属性进行了规范化。当您使用提交
URL时,项目
我假设您已经按照这些步骤嵌入了您的对象?嗯,正如这里所描述的,因为你没有在你的嵌入对象中提供一个< code>@id属性,Api-Platform认为你在推一个新的对象,而不是编辑当前的对象,这就是为什么doctrine大叫(你的错误消息):这个新对象没有注册。
自动注册这个新对象的最简单方法是在提交::$调查数据
属性上添加层叠={"持续"}
注释属性:
class Submission
{
/**
* @OneToOne(targetEntity="App\Entity\SurveyData", cascade={"persist"})
*/
private $surveyData,
}
但您也可以使用EntityManagerInterface::persist()
方法。
注意:我不确定PATCH
方法是否与嵌入式对象完全兼容,我记得github上的一些问题。
游戏创建规范 游戏上线前你需要提供软件著作权、版号申请证明(若涉及支付道具功能)、回执或者受理截图;如果游戏软件著作权有对外授权的,你需要向腾讯提供完整、真实、有效的授权文件,如果授权方允许多个主体同时提交、运营游戏,腾讯以先提交者为准。 如果你需要创建游戏,请根据游戏具体情况选择1~3种游戏类型。 游戏每次更新的玩法需要同步在游戏更新说明中写明; 游戏包控制在5M以内,最大不超过10M; 道具和
在web应用部署描述符中,以下语法用于定义映射: 以‘/’字符开始、以‘/*’后缀结尾的字符串用于路径匹配。 以‘*.’开始的字符串用于扩展名映射。 空字符串“”是一个特殊的URL模式,其精确映射到应用的上下文根,即,http://host:port//请求形式。在这种情况下,路径信息是‘/’且servlet路径和上下文路径是空字符串(“”)。 只包含“/”字符的字符串表示应用的“default”
我了解批次归一化有助于更快的训练,将激活转向单位高斯分布,从而解决梯度消失问题。批次规范行为在训练(使用每个批次的平均值/var)和测试时间(使用训练阶段的最终运行平均值/var)中的应用不同。 另一方面,实例归一化作为对比度归一化,如本文所述https://arxiv.org/abs/1607.08022。作者提到,输出样式化的图像不应依赖于输入内容图像的对比度,因此实例规范化有助于实现。 但是
问题内容: 我目前正在滚动自己的小ORM,发现自己面临创建规范化映射的任务,以防止从数据库中多次加载同一实体。 我目前的方法是使用。该键是映射数据库实体的主键(如果是复合键,则为),其值为。 我的主要问题是如何清理地图?当不再使用某个对象时,映射中的弱引用将消失,而我只会在下一次查找时发现它(或者,如果我不再查找该对象,则永远不会)。当弱引用被清除时,我可以将它们注册为a ,然后在每次查找时检查该
主要内容:范式的类型规范化是在数据库中组织数据的过程。 规范化用于最小化关系或关系集的冗余。 它还用于消除插入,更新和删除异常等不良特性。 规范化将较大的表分成较小的表,并使用关系链接它们。 普通表单用于减少数据库表中的冗余。 范式的类型 有四种类型的范式: 范式 描述说明 1NF 如果它包含原子值,则关系为第范式(1NF)。 2NF 如果它在1NF中,则关系将在2NF中,并且所有非关键属性完全依赖于主键。 3NF
问题内容: 在Python中,是否存在标准化unicode字符串的标准方法,以使其仅包含可用于表示它的最简单的unicode实体? 我的意思是,一些东西,想翻译的顺序来? 查看问题出在哪里: 但现在: 当然,我可以遍历所有字符并进行手动替换等,但是效率不高,我敢肯定我会错过一半的特殊情况,并且会犯错误。 问题答案: 该模块提供一个功能,您要标准化为NFC格式: NFC或“普通形式组合”返回组成的字