Symfony 如果一个值为空,则具有Doctrie方法fromArray的JMS序列化程序不会创建子实体
我使用Symfony 3.2和jms/序列化程序包,我的代码有一些问题,例如:Symfony 如果一个值为空,则具有Doctrie方法fromArray的JMS序列化程序不会创建子实体,symfony,doctrine-orm,jmsserializerbundle,jms-serializer,Symfony,Doctrine Orm,Jmsserializerbundle,Jms Serializer,我使用Symfony 3.2和jms/序列化程序包,我的代码有一些问题,例如: $data = [ 'orgg.egrpo' => '', 'orgg.name' => 'organization name', ]; $serializer = $this->get('jms_serializer'); $transportation = $serializer->fromArray($data, Tran::class);
$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 ) )
如何使用空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;
}
}
好了,我尝试了其他任何带有替换排除策略的变体,但我无法解决我的问题:
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;
}
你说“我不能我的实体不保存”是什么意思?你说“我不能我的实体不保存”是什么意思?