0x1*_*ene 55 php arrays symfony doctrine-orm
我使用symfony和doctrine作为ORM,在可用类型中我有数组,simple_array或json_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)
找到您的类型并检查其方法是否可以按您的方式工作.
这里有一些细节:
在 /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.查看代码我认为它也适用于对象.显然,如果你把这个字段视为纯文本,这是不可能的.
在 /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月更新
Jas*_*ley 10
另一个考虑因素:表示一小组真/假值的最有效方法(如此处所示)将是一个位域.
这样你只存储一个整数而不是一个完整的字符串.并且您避免了编码/解码开销.
有关示例,请参阅/sf/answers/378855011/.