教义数组 vs simple_array vs json_array

新手上路,请多包涵

我使用 symfony 和教义作为我的 ORM。

对于可用类型,我有:

  • 大批
  • 简单数组
  • json_array

我想知道它们之间的区别是什么:我什么时候使用其中一个?

我可以为他们每个人做一个演示来说明差异吗?

我已经在某些应用程序中使用了 simple_array,但我发现我不理解 formType…(或者我没有很好地使用它!?)

_为了说明我的问题_,这里有一个例子:

我有一个必须在特定日期运行的任务所以我创建了带有 days 属性的 TaskEntity

天数是:

 $days = array(
    1=>true,
    2=>true,
    3=>true,
    4=>true,
    5=>true,
    6=>false,
    7=>false
);

但我不知道选择上述哪种类型……

原文由 0x1gene 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 383
1 个回答

对于你的问题 simple_array 是正确的方式,正确的方式也可能创建七个布尔字段。

然而,这里有一点vademecum:

了解类型在原则中如何工作的最好方法是阅读类型的代码,这是因为有一些细节被认为是理所当然的,或者在文档中没有真正解释。

所以你可以进入

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php

找到你的类型并检查它的方法是否如你所愿。

这里有一些细节:

简单数组

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php

 return implode(',', $value);

它只是一个 implode() / explode() 项目,只存储值并且它很有用,因为您可以轻松查询数据库。

大批

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php

 return serialize($value);

调用 PHP 到 serialize() / unserialize() ,它比 json_array 快。查看代码我认为它也适用于对象。显然,如果您将该字段视为纯文本,则它是不可理解的。

json_array

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php

 return json_encode($value);

它调用 json_encode() / json_decode() ,如果您查看该字段,您可以看到一个未格式化的 JSON 数组,但它比 PHP 的序列化对象更具可读性,并且确实更便携(JSON 无处不在)。

2018 年 6 月更新

  • 现在 这里 有一个完整且更新的文档
  • 不推荐使用 json_array 以支持 json 类型,它将利用 json 字段的新数据库功能

原文由 Marino Di Clemente 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题