首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理论ORM ArrayCollection in PostgreSQL

理论ORM ArrayCollection in PostgreSQL
EN

Stack Overflow用户
提问于 2016-06-03 14:00:21
回答 2查看 728关注 0票数 4

我注意到了在PostgreSQL数据库中使用Doctrine的PostgreSQL(在Symfony 3项目中使用这个)的一些奇怪的事情。

以我的带有角色的User类为例,它是由默认角色ROLE_USER启动的,必须是array类型的。

代码语言:javascript
复制
class User implements UserInterface, Serializable
{
    /**
     * @var ArrayCollection
     *
     * @ORM\Column(name="roles", type="array")
     */
    private $roles;

    public function __construct()
    {
        $this->roles = new ArrayCollection();
        $this->roles->add('ROLE_USER');
    }
}

它存储在数据库中,如下所示。

O:43:"Doctrine\Common\Collections\ArrayCollection":1:{s:53:"

这将在尝试以User身份登录时产生一个User错误,因为显然数据库中缺少ArrayCollection的一部分。

在谷歌搜索解决方案后,我偶然发现了这个吉特布问题。据我所知,这是一个bug,您不能在ArrayCollection环境中使用它。

不定义@ORM\Column标记中的类型也没有帮助,因此它会将以下内容存储在数据库中,并且Symfony无法使用它来检索角色。Doctrine\Common\Collections\ArrayCollection@000000002300d10300000000545301a6和使用simple_arrayjson作为类型不会返回一个对象,所以两者都是no-go

有人能找到解决办法或解决方案吗?我真的开始后悔从MySQL转到PostgreSQL

注意:代码在MySQL中运行良好,我刚刚切换了数据库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-08 19:43:10

您始终可以为ArrayCollection属性创建自己的映射类型。理论DBAL文档奥姆食谱描述了如何创建一个。Symfony文档描述了如何激活/注册它。

例如,您可以提取数组并在转换为DB值时对其进行json编码:

代码语言:javascript
复制
json_encode($value->toArray())

和json-解码,并在转换为ArrayCollection值时将其打包回一个PHP:

代码语言:javascript
复制
new ArrayCollection(json_decode($value))

但是这是您的映射类型,您可以做任何您想做的事情:)

票数 0
EN

Stack Overflow用户

发布于 2016-06-06 22:00:49

我自己也有这个问题,我不清楚为什么postgresql会截断序列化的字符串,甚至连字段都标记为text。我的建议是将列类型转换为json_array,因为postgresql有一个本机类型。否则,还可以使用以下自定义类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37616407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档