php - 如何在php中对数据库模型进行json编码?

标签 php mysql orm json

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

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

subscription table/model:

id,
subscriber_id,
publisher_id

user table/model:

id,
firstname,
lastname

我想以 get 请求的形式获取用户的 $id,并按以下格式返回订阅者列表的以下 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替换为用户表中相应的记录。 最简单、最干净的方法是什么?

谢谢

最佳答案

如果您正在为应用程序使用框架,例如 Zend , Phalcon PHP或类似的,返回此类数据的最佳实践如下:

  1. 您的模型应具有任何敏感属性私有(private) protected 。这就是所谓的encapsulation 。就您而言,似乎没有,但记住这一点很重要。

  2. 从服务器检索模型时,您只需对其执行 json_encode 即可,它将生成您作为示例提供的内容,并忽略任何不可见的属性.

如果您也使用不带框架的对象,则上述内容也适用。

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

最后,如果您不打算采用 OOP,那么就没有安全的类型杂耍可用;在对数据进行 JSON 编码之前,您必须手动构造数据。

编辑

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

此外,如果您使用普通 PDO 进行数据库连接,则可以直接 json_encode() 一个 $statement

关于php - 如何在php中对数据库模型进行json编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264307/

相关文章:

python - 尝试在 Django 中使用 `comments` contrib 实现连接时出现问题

java - Hibernate setParamater 一个类

php - 根据其他两个表的比较插入到表中

android - 如何将任何硬代码值与数据库返回值连接或绑定(bind)?

php - ZF2无法选择tablegateway方法中的所有行

php - 将多记录从 Android 插入 PHP?

android - 用于移动解决方案的跨平台ORM

javascript - Ajax Jquery 调用提交不起作用

php - 使用 php 将数组附加到 redis 中的现有键

php - 在 Doctrine 实体中访问 Symfony2 服务层?