0
我有4個相關的實體。JMS序列化程序,Symfony2,是否可以將幾個嵌套實體的JSON序列化爲一個對象?
包 - >具有接收器 包 - >具有PackageLines - > PackageLine具有參照StockItem
纔有可能序列化此JSON數據。
在除了包含所有其他實體套餐實體?以乾淨而有效的方式?
我已經做了一些嘗試與JMS串行器捆綁沒有太多運氣。
庫存料品是參考庫存料品的編號。
包
/**
* Package
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\PackageRepository")
* @ORM\HasLifecycleCallbacks
*
* @ExclusionPolicy("all")
*
*/
class Package
{
CONST STATUS_COMPLETED = "COMPLETED";
CONST STATUS_PROCESSING = "PROCESSING";
CONST STATUS_CANCELLED = "CANCELLED";
CONST STATUS_ON_HOLD = "ON_HOLD";
CONST STATUS_FAILED = "FAILED";
CONST STATUS_ERROR = "ERROR";
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Expose
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="IREnterprise\UserBundle\Entity\User", inversedBy="packages")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
**/
private $user;
/**
* @ORM\ManyToOne(targetEntity="IREnterprise\AppBundle\Entity\Receiver", inversedBy="package", cascade={"all"})
* @Assert\Valid()
* @Expose
**/
private $receiver;
/**
* @ORM\OneToMany(targetEntity="IREnterprise\AppBundle\Entity\PackageLine", mappedBy="package", cascade={"all"})
* @Assert\Valid()
* @Expose
**/
private $packageLines;
/**
* @var \DateTime
*
* @ORM\Column(name="createdAt", type="datetime")
* @Expose
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updatedAt", type="datetime")
* @Expose
*/
private $updatedAt;
/**
* @var \DateTime
*
* @ORM\Column(name="shippedAt", type="datetime", nullable=true)
* @Expose
*/
private $shippedAt;
/**
* @var string
*
* @ORM\Column(name="status", type="string", length=255, nullable=true)
* @Expose
*/
private $status;
/**
* @var string
* @ORM\Column(name="deliveryNote", type="string", length=255, nullable=true)
* @Expose
*/
private $deliveryNote;
public function __construct() {
$this->setCreatedAt(new \DateTime('now'));
$this->setPackageLines(new ArrayCollection());
$this->setStatus(self::STATUS_PROCESSING);
}
... getters & setters
}
接收機
/**
* Receiver
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\ReceiverRepository")
*
* @ExclusionPolicy("all")
*
*/
class Receiver
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="IREnterprise\AppBundle\Entity\Package", mappedBy="receiver", cascade={"all"})
**/
private $packages;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Assert\NotBlank()
* @Expose
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="company", type="string", length=255, nullable=true)
* @Expose
*/
private $company;
/**
* @var string
*
* @ORM\Column(name="address1", type="string", length=255)
* @Assert\NotBlank()
* @Expose
*/
private $address1;
/**
* @var string
*
* @ORM\Column(name="address2", type="string", length=255, nullable=true)
* @Expose
*/
private $address2;
/**
* @var string
*
* @ORM\Column(name="country", type="string", length=255)
* @Assert\Country()
* @Expose
*/
private $country;
/**
* @var string
*
* @ORM\Column(name="zip_code", type="string", length=255)
* @Assert\NotBlank()
* @Expose
*/
private $zipCode;
/**
* @var string
*
* @ORM\Column(name="city", type="string", length=255)
* @Assert\NotBlank()
* @Expose
*/
private $city;
/**
* @var string
*
* @ORM\Column(name="phone", type="string", length=255, nullable=true)
* @Expose
*/
private $phone;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, nullable=true)
* @Assert\Email()
* @Expose
*/
private $email;
public function __construct() {
$this->setPackages(new ArrayCollection());
}
}
PackageLine
/**
* PackageLine
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\PackageLineRepository")
* @ORM\HasLifecycleCallbacks
*
* @ExclusionPolicy("all")
*
*/
class PackageLine {
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="IREnterprise\AppBundle\Entity\Package", inversedBy="package", cascade={"all"})
* @ORM\JoinColumn(name="package_id", referencedColumnName="id")
**/
private $package;
/**
* @ORM\ManyToOne(targetEntity="IREnterprise\AppBundle\Entity\StockItem", inversedBy="stockitem", cascade={"all"})
* @ORM\JoinColumn(name="stockitem_id", referencedColumnName="id")
* @Expose
**/
private $stockItem;
/**
* @var integer
*
* @ORM\Column(name="quantity", type="bigint")
* @Expose
*/
private $quantity;
}
StockItem
/**
* StockItem
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\StockItemRepository")
* @ORM\HasLifecycleCallbacks
*
* @ExclusionPolicy("all")
*
*/
class StockItem
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Expose
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="IREnterprise\UserBundle\Entity\User", inversedBy="stockItems")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
**/
private $user;
/**
* @var string
*
* @ORM\Column(name="barcode", type="string", length=255, nullable=true)
*/
private $barcode;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Expose
* @Assert\NotBlank()
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="SKU", type="string", length=255)
* @Expose
* @Assert\NotBlank()
* @Assert\Type(type="digit", message="The value {{ value }} is not a valid {{ type }}.")
*/
private $SKU;
/**
* @var integer
*
* @ORM\Column(name="stockCount", type="bigint")
* @Expose
*/
private $stockCount = 0;
/**
* @var integer
*
* @ORM\Column(name="orderCount", type="bigint")
* @Expose
*/
private $orderCount = 0;
/**
* @var \DateTime
*
* @ORM\Column(name="createdAt", type="datetime")
* @Expose
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updatedAt", type="datetime")
* @Expose
*/
private $updatedAt;
public function __construct() {
$this->setCreatedAt(new \DateTime('now'));
}
}
非常有幫助的儘管這種聯繫可以回答這個問題,這是更好在這裏包括答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – ElGavilan
感謝您的善意信息。 :) – imran