【问题标题】: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);
}

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2015-12-03
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多