【问题标题】:Return different field names Laravel?返回不同的字段名称Laravel?
【发布时间】:2015-02-27 16:16:10
【问题描述】:
我正在一个应用程序中使用完整的日历开源库。我在后端使用 Laravel。现在大多数 JavaScript 库在其变量名中使用 cameCase。问题是,在后端 Laravel 在表中有一个命名约定,我猜它使用 underscored_in_the_column_name。
现在 create() 方法非常方便,它可以使用输入数据创建一个新资源,我不必手动分配多个字段。但是现在由于我正在使用该库,因此它将数据以 camelCase 格式发送,这在两个方面都是一个问题,因为当我将数据从服务器返回到日历时,我再次必须确保这些字段使用 camelCase 而不是 underscores_between_them。
我该怎么做?有没有办法在 Laravel 中完成这项工作,还是我必须手动完成?
【问题讨论】:
标签:
javascript
php
laravel
naming
【解决方案1】:
在我看来,您基本上有两个选择:
1。把数据库改成camelCase
snake_case 只是 Laravel 的 convention,它不需要你的列名那样。因此,您只需将名称更改为 camelCase 并将模型中的 $snakeAttributes 选项设置为 false:
class MyModel extends Eloquent {
public static $snakeAttributes = false;
}
那么你应该可以create()和get()你的模型使用camelCase属性名称。
2。重写一些方法
如果您想保持数据库表的原样,则必须覆盖模型中的一些方法:
首先,对于数组/JSON转换:
public function toArray(){
$array = parent::toArray();
$renamed = [];
foreach($array as $key => $value){
$renamed[camel_case($key)] = $value;
}
return $renamed;
}
然后用于设置和获取单个属性:
public function getAttribute($key){
$key = snake_case($key);
return parent::getAttribute($key);
}
public function setAttribute($key, $value){
$key = snake_case($key);
parent::setAttribute($key, $value);
}