Сериализатор JMS с методом Doctrie из Array не создает дочернюю сущность, если одно значение пустое
Я использую Symfony 3.2 и jms/serializer-bundle, и у меня есть некоторые проблемы с моим кодом, например:
$data = [
'orgg.egrpo' => '',
'orgg.name' => 'organization name',
];
$serializer = $this->get('jms_serializer');
$transportation = $serializer->fromArray($data, Tran::class);
Результат в этом случае я не могу сохранить свою сущность:
print_r($transportation);
AppBundle\Entity\Tran Object ( [id:protected] => [orgg:protected] => )
Но если я поменяю egrpo на не пустое значение
$data = [
'orgg.egrpo' => 'test egrpo',
'orgg.name' => 'organization name',
];
Результат в порядке, и моя сущность создана:
AppBundle\Entity\Tran Object ( [id:protected] => [discount:protected] => [orgg:protected] => AppBundle\Entity\Orgg Object ( [id:protected] => 12 [name:protected] => organization name [egrpo:protected] => test egrpo ) )
Как я могу создать свою сущность Orgg с пустым egrpo?
$data = [
'orgg.egrpo' => '',
'orgg.name' => 'organization name',
];
Моя сущность
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(readOnly = true, repositoryClass = "AppBundle\Repository\TransportationRepository")
* @ORM\Table("tran")
*
*/
class Tran
{
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(type = "bigint")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @var Orgg
*
* @ORM\ManyToOne(targetEntity = "Orgg", cascade = {"persist"})
*/
protected $orgg;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return Orgg
*/
public function getOrgg()
{
return $this->orgg;
}
/**
* @param Orgg $orgg
* @return Transportation
*/
public function setOrgg (Orgg $orgg)
{
$this->orgg = $orgg;
return $this;
}
}
И Orgg Enity, я пробовал любой вариант с заменой ExclusionPolicy на другой, но я не могу решить мой вопрос:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
/**
* @ORM\Entity(repositoryClass = "AppBundle\Repository\CountryRepository"
* @JMS\ExclusionPolicy("all")
* @ORM\Table("Orgg")
*/
class Orgg
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(type = "string", length = 30, unique = true, options = {"comment": "Наименование государства"})
*
* @Serializer\Groups({"Default", "Import"})
*/
protected $name;
/**
* @var string
*
* @ORM\Column(type = "string", nullable = true, options = {"comment": "Наименование организации по ЕГРПО"})
*/
protected $egrpo;
/**
* @return string
*/
public function getEgrpo()
{
return $this->egrpo;
}
/**
* @param string $egrpo
* @return Organization
*/
public function setEgrpo($egrpo)
{
$this->egrpo = $egrpo;
return $this;
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @param string $name
* @return Country
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
function __toString()
{
return $this->name;
}