使用关联序列化实体

时间:2014-01-08 10:41:25

标签: json symfony serialization doctrine-orm jmsserializerbundle

我有一个实体(Item)与这里声明的另一个实体(Type)有多对一的关系:

     /**
     * @ORM\ManyToOne(targetEntity="Type", inversedBy="item")
     * @ORM\JoinColumn(name="type_id", referencedColumnName="id", nullable=true)
     * @Expose
     */
    protected $itemType;

当我序列化项目时,它包含引用实体(类型)上的其他属性,当我想要的只是ID时:

item_type: {
     id: 1
},

而不是:

item_type: {
     id: 1,
     name: "Case & Cover",
     description: "Keep your phone safe with stylish cases and covers"
},

我已阅读文档并使用群组和maxdepths进行测试但没有运气,并浏览我遇到的问题:  https://github.com/schmittjoh/JMSSerializerBundle/issues/61#issuecomment-3297955

是否已包含此功能?

使用"jms/serializer-bundle": "dev-master"

修改

这是带有关联的样本序列化实体:

{
    id: 1,
    name: "iPhone 5c Slim Genuine Leather Portfolio Case with Stand - Classic Black",
    price: 29.95,
    description: "...",
    image: "1.jpg",
    item_type: {
        id: 1,
        name: "Case & Cover"
    },
    item_brand: [
        {
            id: 1,
            name: "Apple"
        }
    ]
}

我真正想要的是这个(没有关联实体的任何额外属性):(使用JMS Serializer,因为它是一个很棒的库:))

{
    id: 1,
    name: "iPhone 5c Slim Genuine Leather Portfolio Case with Stand - Classic Black",
    price: 29.95,
    description: "...",
    image: "1.jpg",
    item_type: {
        id: 1
    },
    item_brand: [
        {
            id: 1
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

您必须对实体Type @ExclusionPolicy('all')使用exludePolicy,并将@Expose添加到id属性。

请参阅文档http://jmsyst.com/libs/serializer/master/reference/annotations

希望它有用

最好的关注。