[英]Symfony4 Doctrine Associations insert
我從外部soap服務器獲取xml數據,解析數據並創建Object。 接下來,我想將其保留在數據庫中,但是不起作用。
公司編號,我是從外部肥皂及其字符串唯一值(例如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\Entity
*/
class Address
{
// ...
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Company",inversedBy="adresses")
* @ORM\JoinColumn(nullable=false)
*/
private $company;
// ...
}
CompanyController
class CompanyController
{
// ...
$json = $serializer->serialize($data, 'json');
$obj = $serializer->deserialize($json, 'array<App\Entity\Company>', 'json');
// ...
}
每件事看起來都像預期的那樣。 創建的對象包括兩個Address對象。
這是我從反序列化中得到的結構
array:1 [
0 => Company {#524
-id: "0946346d06ffe3f551a80700c2a5c534"
// ..
-addresses: ArrayCollection {#538
-elements: array:2 [
0 => Address {#1017
-id: null
// ...
-company: null
}
1 => Address {#537
-id: null
// ..
-company: null
}
]
}
-status: "Active"
}
]
但是當我嘗試將其存儲在數據庫中時:
CompanyController
class CompanyController
{
// ...
$em= $this->getDoctrine()->getManager();
foreach ($obj as $o) $em->persist($o);
$em->flush();
// ...
}
我出錯了
插入地址不包含公司ID。 company_id設置為
null
類似的json數據,包括與我將以json格式從客戶端獲取的公司對應的地址,通過FormType進行解析並將其存儲到數據庫,但我無法使用:/
如何正確插入相關對象?
好,我解決了問題
公司
/**
* @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感謝您的建議,它對我有很大幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.