Сериализатор 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;
    }

0 ответов

Другие вопросы по тегам