Symfony 3を使用するJSON/JMSSerializerを介して(RESTfulな方法で)公開されるはずのエンティティを作成しました。それは次のようになります:JMSSerializer:idを使用してデータベースから関連オブジェクトを取得する
/**
* MainEntity
*
* @ORM\Table(name="MainEntity")
* @ORM\Entity
*
*/
class MainEntity{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
//... some more "simple" fields ...
/**
* @ORM\ManyToOne(targetEntity="SubEntity")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="subentity", referencedColumnName="id")
* })
* @JMS\Accessor(getter="getSubEntityId",setter="setSubEntity")
* @JMS\Type("integer")
* @JMS\SerializedName("subEntityId")
*/
private $subEntity;
//...
public function getSubEntityId() {
return $this->subEntity->getId();
}
}
JSONのシリアル化はすべて魅力的です!特にサブエンティティ全体ではなく、サブエンティティIDのみが公開されています。サブエンティティIDは非常に大きくなる可能性があります。
ので、代わりの
:{"id": 1, ..., "subEntity": {"id": 123, "name": "Great subEntity", ...} }
は、私は完全に私がニートものです
{"id": 1, ..., "subEntityId": 123 }
を取得します。
しかし、それはデシリアライズに来るとき、私はトラブルに巻き込まれる... setSubEntity
はSubEntity
インスタンスではなく数を期待するので、もちろん、私は、着信要求にも短縮JSON形式を使用したいが、これは失敗しました。
IDが与えられたときに関連オブジェクトを取得するための直列化を達成する方法はありますか?
Iは、これらの可能性について考えた:
- は(
@JMS\Accessor
アノテーションで指定された)特別なセッターを使用し、IDを取得し、データベースから検索されたオブジェクトとsubEntity
フィールドを埋めます。しかし、EntityManagerをエンティティに挿入することを意味します(または同様のものと悪いもの...) - 新しい数値フィールド
subEntityId
を追加して、上記のような特別なセッターでデータを取得します。コントローラを使用して読み取った後、SubEntity
オブジェクトをデータベースから取得し、メソッドをの後にデシリアライズして使用します。あまりにも私によく見えません...
何か提案がありますか?私は、Stackoverflowのいくつかの同様の質問がありますが、誰も私の特別なケースを説明していないと私には思われる。
事前に感謝します。
非常に役に立ちます!ありがとうございました! – ahuemmer