我正在尝试将数据保存在MongoDB中。到目前为止有效。接下来,我想通过@ODM \ EmbedOne / @EmbeddedDocument在此记录中保存一个对象。我在做什么错了?
API平台错误:
“ hydra:description”:“ \” device \“属性的类型必须为\” object \“,指定为\” string \“。”
或
“ hydra:description”:“语法错误”
或
“ hydra:description”:“ \”设备\“属性的类型必须为\”对象\“,指定的\”数组\“。”
api平台发布示例:
{
"name": "AAA",
"nameShort": "AA",
"lastUpdate": 22332340,
"device": "{"deviceId":200, "name":"Test"}"
}
现在有一点代码:
<?php
// api/src/Document/Vessel.php
namespace App\Document;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbedOne;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ApiResource(iri="http://schema.org/Vessel")
*
* @ODM\Document
*/
class Vessel
{
/**
* @ODM\Id(strategy="INCREMENT", type="integer")
*/
private $id;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
* @Assert\Type(type="string")
*/
public $name;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
* @Assert\Type(type="string")
*/
public $nameShort;
/**
* @ODM\Field(type="integer")
* @Assert\NotBlank
* @Assert\Type(type="integer")
*/
public $lastUpdate;
/**
* @EmbedOne(
* discriminatorField="type",
* discriminatorMap={
* "device"="Document\Device"
* },
* defaultDiscriminatorValue="device",
* nullable="true"
* )
*/
public $device;
public function getId(): ?int
{
return $this->id;
}
}
<?php
namespace App\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument;
/**
* @EmbeddedDocument
*/
class Device
{
/**
* @var int
*/
public $deviceId;
/**
* @var string
*/
public $name;
/**
* @return int
*/
public function getDeviceId(): int
{
return $this->deviceId;
}
/**
* @param int $deviceId
*/
public function setDeviceId(int $deviceId): void
{
$this->deviceId = $deviceId;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @param string $name
*/
public function setName(string $name): void
{
$this->name = $name;
}
}
我希望有人能帮忙吗?
答案 0 :(得分:0)
我认为您只需要为“设备”值而不是您正在使用的字符串发送一个对象:
"name": "AAA",
"nameShort": "AA",
"lastUpdate": 22332340,
"device": {"deviceId":200, "name":"Test"}