我正在使用 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或类似的,返回此类数据的最佳实践如下:
您的模型应具有任何敏感属性
私有(private)
或protected
。这就是所谓的encapsulation 。就您而言,似乎没有,但记住这一点很重要。从服务器检索模型时,您只需对其执行
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/