【问题标题】:Laravel/PHP JSON format from existing mySQL databse来自现有 mySQL 数据库的 Laravel/PHP JSON 格式
【发布时间】:2014-12-21 18:43:11
【问题描述】:

我开始使用 Laravel 和 PHP,我正在使用 Laravel 中的“查询构建器”方法来查询现有的 mySQL 数据库。

    public function showApi($id)
    {   
    $data = DB::table('Customers')->where('ID', $id)->get(); //Gets specific records

    return $data;
    }

这会生成一个对象数组和以下 JSON 预览:

我真的在寻找(并且实际上习惯于使用)以下格式:

任何帮助将不胜感激。

【问题讨论】:

  • 所以FirstName 是您数据库中的列名,您想将其转换为first_name
  • 抱歉,有两个单独的数据库,第一个是我的,作为对象数组吐出,第二个是网络上的开放 API,具有我想要的 JSON 格式。
  • 但是您的数据库中的列是如何调用的? FirstNameLastName 等?
  • 对不起,我不明白这个问题。我的数据库列名称是 ID、FirstName、LastName 和 Email
  • 这就是我需要的答案。我现在正在写一个答案;)

标签: php mysql json laravel


【解决方案1】:

在模型转换为数组(或 json 对象)时更改其属性的最佳方法是覆盖模型中的 toArray() 方法。因此,如果您还没有,则必须开始使用 Eloquent models

您的模型 - Customer.php

class Customer extends Eloquent {
    protected $table = 'Customer' // you'll need that because you're table differs from the convention ('customer')

    public function toArray(){
        $attributes = parent::toArray();
        $array = array();

        foreach($attributes as $key => $value){
            $newKey = snake_case($key);
            $array[$newKey] = $value;
        }

        return $array;
    }
}

我们在这里所做的只是从您的父母那里获取属性数组,然后循环遍历它并将键从 StudlyCase 更改为 snake_case

如果您在所有模型中都需要此功能,最好创建一个具有此方法的BaseModel,然后让所有其他模型从它扩展。

最后,您的控制器方法将如下所示:

public function showApi($id)
{   
    $customers = Customer::where('ID', $id)->get(); //Gets specific records

    return Response::json($customers);
}

编辑

正如 Marcin Nabiałek 在 cmets 中指出的那样,您的专栏 ID 有点特别。 Laravel 会将其转换为 i_d。所以为了避免我们需要排除它

foreach($attributes as $key => $value){
    if($key == 'ID'){
        $array['id'] = $value;
    }
    else {
        $newKey = snake_case($key);
        $array[$newKey] = $value;
    }
}

如果你有更多这些“特殊情况”,你也可以使用相同的方法分别处理它们......

【讨论】:

  • 但是在这种情况下你需要小心,因为它不会完全起作用。例如“ID”将被转换为i_d而不是id,因此您需要排除键ID并将其更改为小写。
猜你喜欢
  • 1970-01-01
  • 2017-01-30
  • 2016-03-17
  • 2020-05-19
  • 2017-03-09
  • 2014-02-03
  • 2020-01-31
  • 2017-07-15
  • 1970-01-01
相关资源
最近更新 更多