仅使用symfony序列化器返回子实体的ID

时间:2019-03-11 04:00:50

标签: symfony doctrine serializer

我在我的项目中使用symfony / serializer,并且想返回子实体的唯一ID。例如我有订单和用户这两个实体。 当我获取订单并返回结果时,我只需要用户的ID。我已经通过使用@Groups做到了这一点,但是如果我有另一个需要所有细节的请求,那么将组添加到类中的每个单个属性上的工作量很大。

/**
 * Order
 *
 * @ORM\Table(name="orders")
 * @ORM\Entity
 */
class Order
{
    /**
     * @var int
     *
     * @ORM\Column(name="Id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var Users
     * @ORM\ManyToOne(targetEntity="Users")
     * @ORM\JoinColumn(name="UID", referencedColumnName="UID", nullable=false)
     */
    private $user;

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

    /**
     * @return Users
     */
    public function getUser(): Users
    {
        return $this->user;
    }

    /**
     * @param Users $user
     * @return Order
     */
    public function setUser(Users $user): Order
    {
        $this->user = $user;
        return $this;
    }

}


/**
 * Users
 *
 * @ORM\Table(name="users")
 * @ORM\Entity
 */
class Users
{
    /**
     * @var int
     *
     * @ORM\Column(name="UID", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $UID;

    /**
     * @var string
     *
     * @ORM\Column(name="FirstName", type="encrypted", length=255, nullable=false)
     */
    private $FirstName;

    public function getUID(): ?int
    {
        return $this->UID;
    }

    public function getFirstName(): ?string
    {
        return $this->FirstName;
    }

    public function setFirstName(string $FirstName): self
    {
        $this->FirstName = $FirstName;

        return $this;
    }

}

2 个答案:

答案 0 :(得分:1)

我创建了一个自定义的标准化器来执行此操作。不知道这是否是完美的解决方案,但对我有用。我发现为所有实体编写小组太麻烦了。

export default {
  computed: {
    BackToMulti() {
      if (typeof this.$store.state.slideInfo[prevSlideNumber] === 'undefined') {
      } else {
          if (this.$store.state.slideInfo[prevSlideNumber].thisSlideMulti == 'true') {
            return 'back-to-multi'
        } else {}
      }
    }
  }
};

答案 1 :(得分:0)

您可以序列化所有实体,而无需指定任何组

$serializer->serialize($order, 'json');

如果您要序列化一个孩子,则必须按照您说的做。在每个属性中设置要返回的组。

$serializer->serialize(
    $order,
    'json', ['groups' => 'order-user']
);