【问题标题】:Doctrine doesn't store ArrayCollectionDoctrine 不存储 ArrayCollection
【发布时间】:2014-10-31 23:17:44
【问题描述】:

我有一个Entity,它有一个这样的数组字段:

...
    /**
     * @var array
     *
     * @ORM\Column(name="tels", type="json_array")
     */
    private $tels;
...

我使用表单填写此内容,并且在提交 var_dump($entity->getTels()) 返回此内容后正确填写:

object(Doctrine\Common\Collections\ArrayCollection)[448]
  private '_elements' => 
    array (size=1)
      0 => string '123' (length=3)

但persist学说忽略这个字段值并存储空数组后:

+----+------+
| id | tels |
+----+------+
|  1 | {}   |
+----+------+

有什么问题?

【问题讨论】:

  • 你在标题中写了Doctorine
  • 你使用的是什么版本的 Doctrine?
  • @Chausser:嗨 ;-) | v2.4.6
  • 你在运行什么var_dump(json_encode($entity->getTels()))
  • @Chausser: string '{}' (length=2) !!!?!

标签: php symfony doctrine-orm arraycollection


【解决方案1】:

json_array 类型需要一个数组,然后使用 json_encode 将其转换为 json。虽然 Doctrine ArrayCollection 在技术上是可遍历的,但它并不能很好地转换为数组。所以你要么需要调用->toArray(),要么将你的类型改为array

$entity->setTels($theArrayCollection->toArray());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多