Doctrine orm Symfony4原则协会插入

Doctrine orm Symfony4原则协会插入,doctrine-orm,associations,symfony4,Doctrine Orm,Associations,Symfony4,我从外部soap服务器获取xml数据,解析数据并创建对象。接下来,我想将它持久化到数据库中,但它不起作用 公司id,我从外部soap及其字符串唯一值获取,如387sdfh899ohkadkfh8 公司 /** * @ORM\Entity */ class Company { /** * @ORM\Id() * @ORM\GeneratedValue(strategy="NONE") * @ORM\Column(type="s

我从外部soap服务器获取xml数据,解析数据并创建对象。接下来,我想将它持久化到数据库中,但它不起作用

公司id,我从外部soap及其字符串唯一值获取,如
387sdfh899ohkadkfh8

公司

/**
 * @ORM\Entity
 */
class Company
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\Column(type="string")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
     */
    private $addresses;

    // ...
}
   /**
     * @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
     * @JMS\Accessor(setter="setAddresses")
     */
    private $addresses;
地址

/**
 * @ORM\Entity
 */
class Address
{
    // ...

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Company",inversedBy="adresses")
     * @ORM\JoinColumn(nullable=false)
     */
    private $company;

    // ...
}
公司控制器

class CompanyController
{
    // ...

    $json = $serializer->serialize($data, 'json');
    $obj = $serializer->deserialize($json, 'array<App\Entity\Company>', 'json');     

    // ...
}
class CompanyController
{
    // ...

    $em= $this->getDoctrine()->getManager();
    foreach ($obj as $o) $em->persist($o);
    $em->flush();

    // ...
}
更新-结束 但当我尝试将其存储在数据库中时:

公司控制器

class CompanyController
{
    // ...

    $json = $serializer->serialize($data, 'json');
    $obj = $serializer->deserialize($json, 'array<App\Entity\Company>', 'json');     

    // ...
}
class CompanyController
{
    // ...

    $em= $this->getDoctrine()->getManager();
    foreach ($obj as $o) $em->persist($o);
    $em->flush();

    // ...
}
我犯了个错误

插入地址不包括公司id。公司id设置为
null

类似的json数据,包括我将以json格式从客户端获取的公司地址,通过FormType解析并存储到数据库,但我无法使用:/


如何以正确的方式插入相关对象?

好的,我解决了问题

公司

/**
 * @ORM\Entity
 */
class Company
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\Column(type="string")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
     */
    private $addresses;

    // ...
}
   /**
     * @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
     * @JMS\Accessor(setter="setAddresses")
     */
    private $addresses;
并增加了方法:

/**
 * @param ArrayCollection $addresses
 * @return Company
 */
public function setAddresses(ArrayCollection $addresses): self
{
    if ( !$this->addresses instanceof ArrayCollection ){
        $this->addresses = new ArrayCollection();
    };

    foreach ($addresses as $address){
        if (!$this->addresses->contains($address)) {
        $this->addresses[] = $address;
        $address->setCompany($this);
        }
    }

    return $this;
}

我在这个问题上花了两天的时间:/解决方案非常简单,@malarzm感谢您的建议,它对我帮助很大。

不确定您使用的是什么反序列化程序,但您确定它正在调用您的
addAddress
/
setCompany
方法吗?我使用JMSSerializer,说真的,我不知道它是否调用了
addAddress/setCompany
,我也不知道如何检查它。根据你的建议,我添加了
@JMS\Accessor(setter=“addAddress”)
,实际上之前没有调用addRes。现在,我得到传递给App\Entity\Company::addAddress()的错误
参数1必须是给定的App\Entity\Address、doctor\Common\Collections\ArrayCollection的实例。
。请将您的解决方案作为答案发布,而不是您的解决方案的一部分question@Trix好的,塔克斯。