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

时间:2012-12-18 15:26:47

标签: php forms serialization symfony doctrine-orm

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

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

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

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

目标是显示一个复选框列表,用户可以在其中选择数据库,表和列。接下来,他们可以翻译名称。

由于所有数据都是如此易变,我不确定在Symfony2中是否可以实现这一点。

另一种方法是创建以下实体:{database,table,column}并完全执行OO。然后我可以将序列化数组中的选择导出到期望它的外部应用程序......

你们可以按照我的推理吗?我在这里忽略了一个策略......?

添加了: 该数组是一个直到五度的嵌套数组。数据库包含表,其中包含列。每个项目都有原始名称和翻译名称。

2 个答案:

答案 0 :(得分:0)

我认为你回答了自己的猜测:

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,而SomeEntityFormType又使用DatabaseFormTypes的集合。然后,DatabaseFormType具有TableFormTypes的集合,依此类推。

最终您的表单将被发布,SomeEntity将会更新。然后在发布之前序列化。应该是直截了当的。如果您希望用户添加信息,可能会更具挑战性,但即便如此,它也是可行的。

答案 1 :(得分:0)

我知道它已经很晚但我真的很忙大学所以我不能早点回答

这是我认为最好做的事情

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

所以你创建一个名为Foo的实体并包含一个具有你喜欢的名字的字段(类型文本)

现在棘手的部分是创建一个名为Database的对象,其中包含您需要的所有关系(对于Table对象和Table对象到列对象)

因此,即使我告诉您将字段类型设为文本,您也可以将对象数据库传递给此字段

那它是如何开始工作的

Database对象将有一个__string方法,它将以你想要的方式返回对象的序列化数组

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

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

这是我的想法,不知道它是否适合你