以Symfony2形式存储和检索序列化数组



在我的数据库中有一个表,它有一列类型为text。此列包含一个序列化数组。此数组由另一个应用程序读取和存储,我无法更改其格式。

序列化数组包含两种不同语言的数据库名称、表名称和列名。

我想在Symfony2中编写一个控制器、实体、表单等,它能够修改这个序列化的数组。

我可以使用一个脚本,它可以提供每个序列化数组可能包含的所有可能的数据库名、表名和列名的数组。

目标是提供一个复选框列表,用户可以在其中选择数据库、表和列。接下来,他们可以对这些名字进行翻译。

由于所有数据都是如此的不稳定,我不确定这在Symfony2中是否可能。

另一种选择是制作以下实体:{数据库、表、列}并完全面向对象。然后,我可以将序列化数组中的选择导出到期望这样做的外部应用程序。。。

你们能理解我的推理吗?我是不是忽略了这里的策略。。。?

已添加:该数组是一个嵌套数组,最高可达五阶。数据库包含表,表中包含列。每个项目都有一个原始名称和一个翻译名称。

我想你回答了自己的猜测:

An alternative is to make the following entities: { database, table, column } and do it fully OO.
And then I could export a selection in a serialized array, to the external application that 
expects it that way...

您将从映射到表的主实体开始。

class SomeEntity
{
protected $serializedInfo;
public getDatabases()
{
// Process serializedInfo into an array of database objects and return

然后将SomeEntity传递给SomeEntityFormType,后者又使用DatabaseFormTypes的集合。然后DatabaseFormType有一个TableFormTypes集合,依此类推

最终,您的表格将被张贴,SomeEntity将被更新。然后在发布之前进行序列化。应该直截了当。如果你想让用户添加信息,可能会更具挑战性,但即使这样也是可行的。

我知道很晚了,但我大学很忙,所以我不能早点回答

这是我认为最好的

想象一下,包含包含数组的列的表被称为foo

因此,您创建了一个名为Foo的实体,该实体包含一个具有您喜欢的名称的字段(键入文本)

现在,棘手的部分是制作一个名为Database的对象,该对象包含您需要的所有关系(到表对象和表对象到列对象)

因此,即使我告诉你将字段类型设置为文本,你也会将对象数据库传递到此字段

那么它将如何工作

Database对象将有一个__string方法,该方法将按照您想要的方式返回对象的序列化数组

这样,当doctrine2试图将Database对象保存在文本字段中时,它将被保存为__string方法返回的字符串

您将拥有getDatabase,它将把序列化的数组转换为数据库对象

这是我的想法,不确定它是否适合你

最新更新