如何json编码PHP中的数据库模型?

时间:2014-01-21 16:53:31

标签: php mysql orm json

我正在使用php构建一个安静的Web服务。我想实现订阅/订阅者,其中两者都是用户实体。

我有一个数据库模型如下:

subscription table/model:

id,
subscriber_id,
publisher_id

user table/model:

id,
firstname,
lastname

我想获取用户的$ id作为get请求,并按以下格式返回订阅者列表的以下json响应:

[
    {
        "id" : "USER_SUBSCRIPTION_ID",
        "subscriber" : {
            "id" : "subscriber1",
            "firstname" : "subscriber1_fname",
            "lastname" : "subscriber1_lname",
        },
        "publisher" : {
            "id" : "requester_id",
            "firstname" : "requester_fname",
            "lastname" : "requester_lname",
        }
    },
    {
        "id" : "USER_SUBSCRIPTION_ID",
        "subscriber" : {
            "id" : "subscriber1",
            "firstname" : "subscriber2",
            "lastname" : "subscriber2",
        },
        "publisher" : {
            "id" : "requester_id",
            "firstname" : "requester_fname",
            "lastname" : "requester_lname",
        }
    }
]

我还写了一个序列化器,它获取我的数据库模型并将其编码为json。我不知道如何在这种情况下使用它,因为我不能将publisher_id和subscriber_id替换为用户表中的相应记录。 什么是最简单,最干净的方法?

由于

1 个答案:

答案 0 :(得分:1)

如果您使用的应用程序框架(例如ZendPhalcon PHP或类似内容),返回此类数据的最佳做法是:

  1. 您的模型应具有任何敏感属性privateprotected。这就是所谓的encapsulation。在你的情况下,似乎没有,但重要的是要记住。

  2. 从服务器检索模型时,您只需对其执行json_encode,它就会生成您提供的内容作为示例,而不会显示任何不可见的属性。

  3. 如果您正在使用没有框架的对象,则上述情况适用。

    如果您不使用OOP,我建议您这样做。这将允许PHP为您完成工作,即使它只是“REST”服务,因为它可以用表示数据的对象进行类型处理。

    最后,如果你没有对此进行OOP,那么就没有安全的类型 - 玩杂耍了;您必须在JSON编码之前手动构建数据。

    修改

    值得一提的是,如果您正在使用框架,通常可以使用导出方法格式化输出,例如Phalcon PHP DB结果上的toArray()方法。

    此外,如果您使用vanilla PDO进行数据库连接,则可以json_encode() $statement直接上传。