【问题标题】:In Laravel how to use snake case for database table columns and camel case for model attributes在 Laravel 中,如何对数据库表列使用蛇大小写,对模型属性使用骆驼大小写
【发布时间】:2013-11-03 11:16:00
【问题描述】:

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

apigee 定义的最佳实践之一是对 json 属性键使用驼峰式大小写,这样在 Javascript 中使用 API 时,相应的对象将遵循属性代码约定(驼峰式)。

我希望能够在蛇案例之后定义数据表列,但是当通过我的 api 检索 eloquent 对象时,相应的 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"
}

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

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    创建 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() );
    

    【讨论】:

      【解决方案2】:

      在我看来,您必须创建一个数组,手动处理键(驼峰式),然后在 JSON 上转换数组(而不是结果)。

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

      我想这可以完成这项工作。 :D

      【讨论】:

        猜你喜欢
        • 2019-06-12
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多