Laravel+MySQL 使用->运算符取 JSON 字段被引号包围应该怎么优雅的解决?

如题:

Channel::query()
            ->select(['id', 'name', 'father', 'sort', 'type', 'status', 'extra->cover as cover'])

取出的cover"包围 类似于"http://www.hao123.com"
MySQL 有 JSON_UNQUOTE()
请问在Eloquent中如何优雅解决?
(看了几遍文档好像没有提到这一点,如果有疏漏请恕我眼拙)

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

可以尝试使用 Eloquent: Mutators,大概代码:

class Channel extends Model
{
    protected $casts = [
        'extra' => 'array',
    ];

    ....

    public function getCoverAttribute()
    {
        return  $this->attributes['extra']['cover'] ?? '';
    }
}
4年前 评论

@lym125
谢谢,

我的问题描述有问题

我的这个问题实际上应该是Builder 层面的,
我不想使用ORM的方法 是为了避免一次取出全部 extra 字段的内容,

看起来应该是没有特别好的解决办法了 最后我选择了在collection上使用each方法强行替换掉了引号 :joy:

4年前 评论

@fripig 你是指让我用原生语句还是?
我是想问builder或其他层面有没有类似->unquote('cover')这样的方法可以处理引号,而这个方法存在我却不知道,就比如我之前不知道分组查询可以使用where+闭包,
不过原生语句的确是个方法,谢谢

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!