【发布时间】:2019-09-16 14:52:28
【问题描述】:
我正在尝试将数据保存在 MongoDB 中。到目前为止有效。接下来,我想通过@ODM\EmbedOne / @EmbeddedDocument 在这条记录中保存一个对象。我做错了什么?
API 平台错误:
"hydra:description": "\"device\" 属性的类型必须是 \"object\", \"string\" 给定的。"
或
"hydra:description": "语法错误"
或者
"hydra:description": "\"device\" 属性的类型必须是 \"object\", \"array\" 给定的。"
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;
}
}
希望有人能帮忙?
【问题讨论】:
标签: php mongodb symfony api-platform.com