簡體   English   中英

Symfony2-通過關系序列化對象(ManyToMany,OneToMany…)

[英]Symfony2 - Serialize object with relations (ManyToMany, OneToMany …)

有人可以告訴我是否可以序列化具有關系的實體? json_encode已經可以使用,但是我的對象看起來像這樣:

{
  "id": 1,
  "lot": 32,
  "num": "533987",
  "date_modification": {
      "date": "2015-02-17 14:24:52",
      "timezone_type": 3,
      "timezone": "Europe/Paris"
  },
  "customer": {
      "id": 1,
      "lastname": "DUFRESNE",
      "firstname": "CHRISTOPHE",
  }
}

但我想使用ootu子對象序列化數據。 實際上是這樣的:

{
  "id": 1,
  "lot": 32,
  "num": "533987",
  "date_modification": "2015-02-17",
  "customer": "DUFRESNE CHRISTOPHE",
  }
}

所以我檢查了文檔: http : //symfony.com/doc/current/components/serializer.html但是我看不出是否有可能處理ManyToMany之類的關系,以及如何做到這一點?

這是我的實體:

/**
 * Subscription (BS)
 *
 * @ORM\Table(name="subscription")
 * @ORM\Entity(repositoryClass="Jcd\LiteyearBundle\Entity\SubscriptionRepository")
 * @ORM\HasLifecycleCallbacks
 */

class Subscription {

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="lot", type="smallint")
     */
    private $lot;

    /**
     * @var string
     * @ORM\Column(name="num", type="string", length=9)
     */
    private $num;

    /**
     * @var \DateTime
     * @ORM\Column(name="date_creation", type="datetime", nullable=true)
     */
    private $date_creation;

    /**
     * @var \DateTime
     * @ORM\Column(name="date_modification", type="datetime", nullable=true)
     */
    private $date_modification;

    /**
     * @var \DateTime
     * @ORM\Column(name="date_completeness", type="datetime", nullable=true)
     */
    private $date_completeness;

    /**
     * @var \DateTime
     * @ORM\Column(name="date_reception", type="datetime", nullable=true)
     */
    private $date_reception;

    /**
     * @var \DateTime
     * @ORM\Column(name="date_signature", type="datetime", nullable=true)
     */
    private $date_signature;

    /**
     * @var \DateTime
     * @ORM\Column(name="date_entry", type="datetime", nullable=true)
     */
    private $date_entry;

    /**
     * @var \Integer
     * @ORM\Column(name="statement", type="integer", nullable=true)
     */
    private $statement; // Releve du compteur

    /**
     * @var \Integer
     * @ORM\Column(name="statement_kind", type="integer", nullable=true)
     */
    private $statement_kind; // Personne qui a relevé le compteur

    /**
     * @var \Integer
     * @ORM\Column(name="car", type="integer", nullable=true)
     */
    private $car; // Consommation annuelle de reference

    /**
     * @var boolean
     * @ORM\Column(name="pro", type="boolean", options={"default" = false}, nullable=true)
     */
    private $pro;

    /**
     * @ORM\ManyToOne(targetEntity="Jcd\LiteyearBundle\Entity\User", cascade={"persist"}, inversedBy="adv_subscriptions")
     * @ORM\JoinColumn(name="adv_id", referencedColumnName="id", nullable=true)
     */
    private $adv;

    /**
     * @ORM\ManyToOne(targetEntity="Jcd\LiteyearBundle\Entity\User", cascade={"persist"}, inversedBy="vendor_subscriptions")
     * @ORM\JoinColumn(name="vendor_id", referencedColumnName="id", nullable=true)
     */
    private $vendor;

    /**
     * @var \Integer
     * @ORM\Column(name="provider", type="integer")
     */
    private $provider;

    /**
     * @var \Integer
     * @ORM\Column(name="state", type="integer")
     */
    private $state;

    /**
     * @var \Integer
     * @ORM\Column(name="payment", type="integer")
     */
    private $payment;

    /**
     * @var \Integer
     * @ORM\Column(name="billing", type="integer")
     */
    private $billing;

    /**
     * @var string
     * @ORM\Column(name="comment", type="text", nullable=true)
     */
    private $comment;

    /**
     * @var float
     * @ORM\Column(name="wage", type="float", nullable=true)
     */
    private $wage; // Anciennement Rem

    /**
     * @var float
     * @ORM\Column(name="com", type="float", nullable=true)
     */
    private $com; // Anciennement Commission

    /**
     * @var string
     * @ORM\Column(name="offer", type="text", nullable=true)
     */
    private $offer; // Anciennement Prix fixe

    /**
     * @var \Integer
     * @ORM\Column(name="mail_kind", type="integer", nullable=true)
     */
    private $mail_kind; //Anciennement Mail

    /**
     * @ORM\OneToMany(targetEntity="SubscriptionTrack", cascade={"persist", "remove"}, mappedBy="subscription")
     */
    private $tracks;

    /**
     * @ORM\ManyToMany(targetEntity="SubscriptionSalary", cascade={"persist"}, mappedBy="subscriptions")
     **/
    private $salaries;

    /**
     * @ORM\OneToOne(targetEntity="Jcd\LiteyearBundle\Entity\Customer")
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id")
     **/
    private $customer;

謝謝您的回答!

實現所需目標的最簡單方法是使用JMSSerializerBundle ,它具有許多您可能要使用的功能。

試試看: http : //jmsyst.com/bundles/JMSSerializerBundle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM