Laravel Eloquent 序列化:如何重命名属性?
Posted
技术标签:
【中文标题】Laravel Eloquent 序列化:如何重命名属性?【英文标题】:Laravel Eloquent Serialization: how to rename property? 【发布时间】:2015-01-09 19:12:50 【问题描述】:例如,我有扩展 Eloquent 的用户模型。在数据库表中,列名是user_id
。
读取后如何将结果输出为'userId'?
【问题讨论】:
您是只对一个变量的解决方案感兴趣,还是想将所有内容从snake_case 重命名为camelCase? @lukasgeiter 我想将所有内容从snake_case 重命名为camelCase。但我也想知道如何为一个变量做这件事。谢谢。 【参考方案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;
【讨论】:
以上是关于Laravel Eloquent 序列化:如何重命名属性?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?