在我的数据库中有一个表,其中包含一个text类型的列。该列包含一个序列化数组。该数组由另一个应用程序读取和存储,我无法更改其格式。
序列化数组包含两种不同语言的数据库名称,表名和列名称选择。
我想在Symfony2中编写一个能够修改此序列化数组的控制器,实体,表单等。
我可以使用一个脚本,它可以提供每个序列化数组可能包含的所有可能的db名称,表名和列名的数组。
目标是显示一个复选框列表,用户可以在其中选择数据库,表和列。接下来,他们可以翻译名称。
由于所有数据都是如此易变,我不确定在Symfony2中是否可以实现这一点。
另一种方法是创建以下实体:{database,table,column}并完全执行OO。然后我可以将序列化数组中的选择导出到期望它的外部应用程序......
你们可以按照我的推理吗?我在这里忽略了一个策略......?
添加了: 该数组是一个直到五度的嵌套数组。数据库包含表,其中包含列。每个项目都有原始名称和翻译名称。
答案 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
这是我的想法,不知道它是否适合你