【问题标题】:Build JSON object using database relations/foreign key PHP使用数据库关系/外键 PHP 构建 JSON 对象
【发布时间】:2016-05-26 19:01:07
【问题描述】:

我需要一些帮助。

基本上我需要做的是,它是数据库之间的简单映射关系 (FK),并将其作为 JSON(使用 php)。

例如,我有这两个抽象数据库:

1:客户

+-------+-----------+----------+
|  id   |    name   |  car_id  |
+-------+-----------+----------+

2:汽车

+-------+-----------+----------+
|  id   |    model  |  price   |
+-------+-----------+----------+

我需要一个类似的 JSON:

{
    "customers": [{
        "id": "1",
        "name": "First Customer",
        "car": {
            "id": "1",
            "model": "sampleCar",
            "price:": "19.33"
        }
    }, {
        "id": "2",
        "name": "second Customer",
        "car": {
            "id": "2",
            "model": "betterCar",
            "price:": "99.33"
        }
    }]
}

我正在使用 MySQL 来保存这些数据,但我可以更改数据库 - 我唯一不能更改的是 PHP。

我的问题是: 有没有使用框架的执行方式来做到这一点? (或者也许是一个框架呢?)

谢谢!

【问题讨论】:

  • 你不能改变PHP是什么意思?你已经有什么 PHP 了? PHP 必须为数据创建适当的查询。
  • 如果客户拥有不止一辆汽车会怎样?您应该使用多对多表将客户与汽车联系起来。或者如果一辆车只能有一个车主,你应该把owner_id放在car中。
  • @Barmar,我的意思是后端语言必须是 PHP,不过我可以更改代码。 :) 实物是一对一的,我用客户和汽车来举例说明!

标签: php json database orm foreign-key-relationship


【解决方案1】:

这是一个简单的JOIN 查询,然后获取循环会创建相应的数据。

$sql = "SELECT c.id AS cus_id, c.name, car.id AS car_id, car.model, car.price
        FROM customer AS c
        LEFT JOIN car ON car.id = c.car_id";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$customers = array();
while ($row = $stmt->fetch) {
    if ($row['car_id'] != null) {
        $car = array('id' => $row['car_id'],
                     'model' => $row['model'],
                     'price' => $row['price']);
    } else {
        $car = null;
    }
    $customers[] = array('id' => $row['cus_id'],
                         'name' => $row['name'],
                         'car' => $car);
}

$result = array('customers' => $customers);

【讨论】:

  • 谢谢!没有更动态的方式来做到这一点?
  • 可能有一些框架可以自动化它,尽管我不确定他们是否能够为car 创建您想要的嵌套,因为查询返回同一行上的所有内容。如果客户和汽车之间是一对多的关系,他们可能会自动创建一系列汽车。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2013-03-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多