【问题标题】:API Platform, Posting an object with EmbedOne in MongoDBAPI 平台,在 MongoDB 中使用 EmbedOne 发布对象
【发布时间】: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


    【解决方案1】:

    我认为您只需要为“设备”值发送一个对象,而不是您正在使用的字符串:

      "name": "AAA",
      "nameShort": "AA",
      "lastUpdate": 22332340,
      "device": {"deviceId":200, "name":"Test"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2020-03-15
      • 2013-12-06
      • 2016-04-02
      相关资源
      最近更新 更多