我正在使用Symfony 2框架开发报告工具。此报告工具使用许多参数,这些参数通过用户填写的html表单传递。然后使用参数创建报告。我们谈论的是40到50个参数。
我的想法: 我的想法是创建一个包含所有数据的json对象,并将其保存在一个数据库字段中,而不是为每个参数创建一个数据库列。我找到了一些可能的解决方案。也许你可以给我一些关于哪一个是有利的建议。
解决方案1:我可以创建一个实体和一个Formtype(就像Symfony 2中的常用方法)而不是将Entity-Object持久化到数据库中,我将序列化整个Object,然后将其保存在单个Database-Field中。 / p>
$report = new Report();
$form = $this->createForm(new ReportType(), $report);
if ($form->isValid()) {
$reportSerialized = serialize($reportParams);
//...then persist $reportSerialized
然后在创建报告时,我会反序列化对象:
//...load report from database
$reportParams = unserialize($reportSerialized);
我尝试了这种方法,但是当存在嵌套对象时出现了反序列化的问题。
解决方案2:我既不使用Doctrine Entity也不使用Formtype Entity,而是直接从请求中获取数据作为数组,并从该数组创建一个json对象并保留它。
if ($form->isValid()) {
$reportParams = $this->getRequest()->request->all();
$reportParams = serialize($reportParams);
//...then persist into Database
然后在创建报告时,我会反序列化对象:
$reportParams = unserialize($reportSerialized);
这两种解决方案中的哪一种是最佳做法,或者您有完全不同的解决方案?
答案 0 :(得分:0)
如果您使用的是学说,请查看simple array或array类型。
根据PHP序列化映射和转换数组数据。如果需要存储数组数据的精确表示,则应考虑使用此类型,因为它使用序列化将数组的精确副本表示为数据库中的字符串。从数据库检索的值总是使用反序列化转换为PHP的数组类型,如果不存在数据,则返回null。
注释是:
/**
* @var YourType[]
* @ORM\Column(type="array")
*/