针对您的问题,simple_array
是正确的方法,这种方法也可能会创建七个布尔字段。
然而,这里有一本小指南:
了解一个 doctrine 类型的最好方法是阅读类型的代码,这是因为有许多细节被视为理所当然或在文档中没有真正解释清楚。
因此,您可以转到
/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_encode()
/json_decode()
,如果你查看字段,你可以看到一个未格式化的JSON数组,但它比PHP的序列化对象更易读,并且更便携(JSON存在于各处)。
2018年6月更新
- 现在有一个完整而更新的文档在这里
- json_array已被弃用,取而代之的是json类型,它将利用新的数据库功能来处理json字段
json_array
,请记住,实际上(因为bug http://www.doctrine-project.org/jira/browse/DBAL-446),即使声明为`nullable=true`(当由Doctrine构建/填充实体时),它也永远不可能是null
。 所以为了解决这个问题,_始终_为您的$myJsonArray
属性设置值array()
。 因此,您的属性定义应该是:/* @Column(type="json_array) */ private $myJsonArray = array();
。 并通过empty($this->myJsonArray)
而不是null === $this->myJsonArray()
来检查它是否设置。 - Dimitry K