【问题标题】:Laravel Eloquent Serialization: how to rename property?Laravel Eloquent 序列化:如何重命名属性?
【发布时间】:2015-01-09 19:12:50
【问题描述】:

例如,我有扩展 Eloquent 的用户模型。在数据库表中,列名是user_id

读取后如何将结果输出为'userId'?

【问题讨论】:

  • 您是只对一个变量的解决方案感兴趣,还是想将所有内容从snake_case 重命名为camelCase?
  • @lukasgeiter 我想将所有内容从snake_case 重命名为camelCase。但我也想知道如何为一个变量做这件事。谢谢。

标签: php laravel eloquent


【解决方案1】:

使用属性访问器添加单个“别名”

您可以使用attribute accessors 来创建“新属性”:

public function getUserIdAttribute(){
    return $this->attributes['user_id'];
}

这允许您以这种方式访问​​值:$user->userId

现在让我们将值添加到数组/JSON 转换中:

protected $appends = array('userId');

最后隐藏丑陋的user_id

protected $hidden = array('user_id');


转换为数组/JSON时,转换所有属性名

你也可以使用toArray()将模型转换为数组或JSON字符串时更改所有属性名称。

public function toArray(){
    $array = parent::toArray();
    $camelArray = array();
    foreach($array as $name => $value){
        $camelArray[camel_case($name)] = $value;
    }
    return $camelArray;
}

【讨论】:

  • 完美!谢谢!有一个小错误:return $camelArray; 而不是 return $camelArray();
  • 我想知道在 Symfony 2 中是否有类似 jmsyst.com/libs/serializer/master/reference/annotations 的东西。
  • 没有像这样开箱即用的东西。也许有这个包,当然你可以自己构建它;)
  • 这对我正在进行的项目帮助很大。我的服务器需要改变模型中定义的属性,以便我们受信任的客户端应用程序可以使用返回的 Json。 +1
【解决方案2】:

我就是这样做的。

protected $remap_attrs = ['old_name' => 'new_name'];
public function toArray(){
    $array = parent::toArray();
    foreach($this->remap_attrs as $key => $new_key) {
        if(array_key_exists($key, $array)) {
            $array[$new_key] = $array[$key];
            unset($array[$key]);
        }
    }
    return $array;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2011-03-08
    • 2015-08-25
    • 1970-01-01
    相关资源
    最近更新 更多