Doctrine数组vs simple_array vs json_array

0x1*_*ene 55 php arrays symfony doctrine-orm

我使用symfony和doctrine作为ORM,在可用类型中我有数组,simple_arrayjson_array 我想知道它们之间有什么区别?何时使用其中一个?你有每个展示案例来说明差异吗?

我已经在某些应用程序中使用了simple_array,但我发现它在formType中没有很好地呈现...(或者我可能没有使用它!?)

为了说明我的问题,这是一个展示案例:

我有一个任务,我必须在特定的一周运行所以我创建具有days属性的TaskEntity

天就像那样:

$days = array(
    1=>true,
    2=>true,
    3=>true,
    4=>true,
    5=>true,
    6=>false,
    7=>false
);
Run Code Online (Sandbox Code Playgroud)

但我不知道巫婆类型可供选择......

Mar*_*nte 114

对于你的问题simple_array是正确的方法,正确的方法也可以创建七个布尔字段.

然而,这里有点vademecum:

查看类型在doctrine中的工作原理的最好方法是读取类型的代码,这是因为有几个细节被认为是理所当然的,或者在文档中没有真正解释过.

所以你可以进入

/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php
Run Code Online (Sandbox Code Playgroud)

找到您的类型并检查其方法是否可以按您的方式工作.

这里有一些细节:

simple_array

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

return implode(',', $value);
Run Code Online (Sandbox Code Playgroud)

它只是一个implode()/ explode()项,只存储值,并因为你可以很容易地查询数据库,它是有用的.

排列

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

return serialize($value);
Run Code Online (Sandbox Code Playgroud)

将PHP调用到serialize()/ unserialize(),它比它更快json_array.查看代码我认为它也适用于对象.显然,如果你把这个字段视为纯文本,这是不可能的.

json_array

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

return json_encode($value);
Run Code Online (Sandbox Code Playgroud)

它调用json_encode()/ json_decode(),如果你在字段中查看,你可以看到一个未格式化的JSON数组,但它比PHP的序列化对象更具可读性,并且更加可移植(JSON随处可见).

2018年6月更新

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

  • 弃用json_array https://www.doctrine-project.org/projects/doctrine-dbal/zh/2.7/reference/types.html (2认同)

Jas*_*ley 10

另一个考虑因素:表示一小组真/假值的最有效方法(如此处所示)将是一个位域.

这样你只存储一个整数而不是一个完整的字符串.并且您避免了编码/解码开销.

有关示例,请参阅/sf/answers/378855011/.