教义阵列 vs simple_array vs json_array

2022-08-30 08:55:55

我使用符号和教义作为我的ORM。

对于可用的类型,我有:

  • 数组
  • simple_array
  • json_array

我想知道它们之间有什么区别:我什么时候使用一个或另一个?

我可以为每个演示来说明差异吗?

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

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

我有一个必须在特定日期运行的任务,因此我创建了具有days属性的任务实体

天数将是:

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

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


答案 1

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

然而,这里有一个小的vademecum:

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

所以你可以进入

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

找到您的类型并检查其方法是否按您的要求工作。

以下是一些详细信息:

simple_array

/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数组,但它比PHP的序列化对象更具可读性,并且实际上更具可移植性(JSON无处不在)。json_encode()json_decode()

2018 年 6 月更新

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

答案 2

另一个考虑因素:表示一小组真/假值的最有效方法,如这里介绍的那些,将是一个比特字段

这样,您只能存储一个整数,而不是一个完整的字符串。而且您可以避免编码/解码开销。

有关 https://stackoverflow.com/a/5412214/827254,请参见一个很好的例子。