【发布时间】:2015-07-12 02:33:20
【问题描述】:
我有 4 个相关的实体。
包 -> 有一个接收器 Package -> 有 PackageLines -> PackageLine 引用了 StockItem
是否可以序列化这个 JSON 数据。
进入包含所有其他实体的包实体?以干净高效的方式?
我对 JMS 序列化程序包进行了一些尝试,但运气不佳。
stock item 是引用的 stock item 的 id。
包
/**
* 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
*
* @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
*
* @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'));
}
}
【问题讨论】:
标签: symfony jmsserializerbundle