在Laravel中如何对数据库表列使用snake case,为模型属性使用camel case

时间:2013-10-24 16:11:33

标签: laravel laravel-4 eloquent

我是laravel 4的新手,我正在尝试按照Apigee定义的最佳实践创建一个rest API。

apigee定义的最佳实践之一是对json属性键使用camel case,这种方式在Javascript中使用API​​时,相应的对象将遵循属性代码约定(camel case)。

我希望能够在蛇案例之后定义数据表列,但是当通过我的api检索有说服力的对象时,相应的JSON必须遵循驼峰案例。

我读到了一个静态变量$ snakeAttributes,可以在模型类中设置它的文档说“指示属性是否是蛇形数组”。我试图覆盖这个变量并将其设置为false(MyResource类),但是当执行下面的代码时,json仍然以蛇形式出现:

代码:

   $resource = MyResource::find($id);
   return Response::json($resource);

JSON:

{ 
first_name: 'Michael', 
created_at: "2013-10-24 15:30:01",
updated_at: "2013-10-24 15:30:01"
}

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:13)

创建BaseModel和一种新方法来帮助您:

class BaseModel extends \Eloquent {

    public function toArrayCamel()
    {
        $array = $this->toArray();

        foreach($array as $key => $value)
        {
            $return[camel_case($key)] = $value;
        }

        return $return;
    }

}

你的模特:

class MyResource extends BaseModel {
}

然后使用它:

$resource = MyResource::find($id);
return Response::json( $resource->toArrayCamel() );

答案 1 :(得分:0)

我看到,你必须创建一个数组,手动操作键(驼峰案例),然后在JSON上转换数组(不是结果)。

$resource = MyResource::find($id);  
$array = array();

foreach($resource as $key => $value) {
    $key = str_replace('_', '-', $key);
    $array[$key] = $value;
}
return Response::json($array);

我想这会完成这项工作。 :d