数据库字段本身就是驼峰命名字段,如何使用 Laravel 访问器

我的数据库字段是本身名字就是驼峰命名的字段,这个时候再使用访问器,是作用不到的。怎么办
这里是我的数据库一部分结构

  `finishTime` varchar(13) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单完成时间(时间戳,毫秒)',
  `orderEmt` tinyint(4) NOT NULL DEFAULT '0' COMMENT '下单设备(1:PC,2:无线)',
  `orderId` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '订单ID',
  `orderTime` varchar(13) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '下单时间(时间戳,毫秒)',

我写的模型的访问器,这样写的话,是没有用的

    /**
     * 获取下单时间
     */
    public function getOrderTimeAttribute($value)
    {
        return $value/1000;
    }

请各位大神指点一二

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 11

貌似没有好办法, 只能重写 Illuminate\Database\Eloquent\Concerns\HasAttributesIlluminate\Database\Eloquent\Model, 然后去继承自己写的 Model

覆盖默认的 trait HasAttributes,就能实现了

trait HasAttributes
{
// 片段
    public function hasGetMutator($key)
    {
        return method_exists($this, 'get'.Str::studly($key).'Attribute');
    }
    protected function mutateAttribute($key, $value)
    {
        return $this->{'get'.Str::studly($key).'Attribute'}($value);
    }

    public function hasSetMutator($key)
    {
        return method_exists($this, 'set'.Str::studly($key).'Attribute');
    }
    protected function setMutatedAttributeValue($key, $value)
    {
        return $this->{'set'.Str::studly($key).'Attribute'}($value);
    }
}
1个月前 评论
L学习不停 1个月前
houxin (楼主) 1个月前
l333308 1个月前
犯二青年

很奇怪的是为啥数据字段命名要用驼峰命名法~

1个月前 评论
playmaker 1个月前

@犯二青年 这是数据库是旧的数据库,很早之前创建的,当时就是按照驼峰这种规范来创建的。

1个月前 评论
犯二青年

@houxin 可以试试这么写

/**
 * 获取用户的姓名.
 *
 * @return string
 */
public function getFullNameAttribute()
{
    $FullName = $this->字段名;

    //TODO 对改字段做处理

    return $FullName
}
1个月前 评论
犯二青年 (作者) 1个月前
hedeqiang 1个月前
犯二青年 (作者) 1个月前
JaguarJack

似乎没办法。 最终都是他

Str::studly($key)
1个月前 评论

数据库的字段好像是不分大小写的

1个月前 评论
L学习不停 1个月前

@expectedSelf

file
只是数据库内部是不区分的,意思就是说,你不能同时创建大小写的两个字段名称。但是laravel读入数据的时候,还是有大小写区分的。主要是laravel访问器,驼峰对应的数据字段是下划线连接的。而我们想让驼峰对应的字段,也是驼峰的。

1个月前 评论

@犯二青年 换个名字就可以的, 比如像这样

    /**
     * 获取下单时间
     */
    public function getMyOrderTimeAttribute()
    {
        return $this->orderTime/1000;
    }

然后取值的时候, 这么取就可以

$model->my_order_time

下面的这种方式就不行,会报错,提示orderTime属性不存在。

    /**
     * 获取下单时间
     */
    public function getOrderTimeAttribute()
    {
        return $this->orderTime/1000;
    }

下列取值

$model->order_time

这样就会报错

1个月前 评论

貌似没有好办法, 只能重写 Illuminate\Database\Eloquent\Concerns\HasAttributesIlluminate\Database\Eloquent\Model, 然后去继承自己写的 Model

覆盖默认的 trait HasAttributes,就能实现了

trait HasAttributes
{
// 片段
    public function hasGetMutator($key)
    {
        return method_exists($this, 'get'.Str::studly($key).'Attribute');
    }
    protected function mutateAttribute($key, $value)
    {
        return $this->{'get'.Str::studly($key).'Attribute'}($value);
    }

    public function hasSetMutator($key)
    {
        return method_exists($this, 'set'.Str::studly($key).'Attribute');
    }
    protected function setMutatedAttributeValue($key, $value)
    {
        return $this->{'set'.Str::studly($key).'Attribute'}($value);
    }
}
1个月前 评论
L学习不停 1个月前
houxin (楼主) 1个月前
l333308 1个月前

@may_J 用as是可以的。但是,每次查询,都要指定as才行的,而且那么多字段,要用select的话as的话,要指定的太多了

1个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!