我从外部soap服务器获取xml数据,解析数据并创建Object。接下来我想把它保存在数据库中,但它不起作用。
公司id,我从外部soap和它的字符串唯一值387sdfh899ohkadkfh8
中获得。
公司
/**
* @ORMEntity
*/
class Company
{
/**
* @ORMId()
* @ORMGeneratedValue(strategy="NONE")
* @ORMColumn(type="string")
*/
private $id;
/**
* @ORMOneToMany(targetEntity="AppEntityAddress", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
*/
private $addresses;
// ...
}
地址
/**
* @ORMEntity
*/
class Address
{
// ...
/**
* @ORMManyToOne(targetEntity="AppEntityCompany",inversedBy="adresses")
* @ORMJoinColumn(nullable=false)
*/
private $company;
// ...
}
公司控制器
class CompanyController
{
// ...
$json = $serializer->serialize($data, 'json');
$obj = $serializer->deserialize($json, 'array<AppEntityCompany>', '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"
}
]
更新-结束
但当我尝试将其存储在数据库中时:
公司控制器
class CompanyController
{
// ...
$em= $this->getDoctrine()->getManager();
foreach ($obj as $o) $em->persist($o);
$em->flush();
// ...
}
我收到错误
插入地址不包括公司id。company_id设置为
null
类似的json数据,包括我将用json格式从客户端获得的公司对应的地址,通过FormType解析并存储到数据库,但我无法使用/进行管理
我应该如何以正确的方式插入相关对象?
好的,我解决了问题
公司
/**
* @ORMOneToMany(targetEntity="AppEntityAddress", mappedBy="company", orphanRemoval=true, cascade={"persist","remove"})
* @JMSAccessor(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谢谢你的建议,它对我帮助很大。