У меня есть 4 сущности, которые связаны между собой.JMS Serializer, Symfony2, можно ли сериализовать JSON нескольких вложенных объектов на один объект?
Package -> есть приемник Package -> имеет 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