没有不值得去解决的问题,也没有不值得去学习的技术!

在 Laravel 6 中,由于接口响应的字段名称为驼峰形式,而表字段名称为小写字母加下划线的形式,相互转换的处理

查看日志中的生成的原生 SQL 语句
1、表字段名称为小写字母加下划线的形式。如图1
表字段名称为小写字母加下划线的形式
图1
2、接口基于 GraphQL 实现,规范为接口响应的字段名称需为驼峰形式。


type ThemeAsset
{
    "ID"
    id: ID!
    "主题ID"
    themeId: String!,
    "版本"
    version: String!,
    "内容"
    content: String,
    "路径,相对于主题的路径,如 ages/index.blade.php"
    key: String!,
    "MIME 类型"
    mimeType: String!,
    "类别,page、component、config(仅这3种类型有配置),asset、unknown"
    category: String!,
    "主题的 Schema,包括页面、主题、组件"
    schema: String,
    "创建时间"
    createdAt: DateTime!
    "更新时间"
    updatedAt: DateTime
}


3、打印解析器 /Modules/ThemeStore/Resolver/OnlineStoreTheme/ThemeAssetsResolver.php 方法中的 $themeAssets,对象属性名称为小写字母加下划线的形式。如图2
打印解析器 /Modules/ThemeStore/Resolver/OnlineStoreTheme/ThemeAssetsResolver.php 方法中的 $themeAssets,对象属性名称为小写字母加下划线的形式
图2
<pre class="wp-block-syntaxhighlighter-code">

<?php

namespace Modules\ThemeStore\Resolver\OnlineStoreTheme;

use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;
use GraphQL\Type\Definition\ResolveInfo;
use Modules\ThemeStore\Entities\ThemeAsset;

class ThemeAssetsResolver
{
    public function __invoke($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        $themeId = $rootValue['themeAssets']['theme_id'];

        $themeAssets = ThemeAsset::where('theme_id', $themeId)->get();

		print_r($themeAssets);
		exit;

    }
}


</pre>
4、方案一为将 $themeAssets 进行 foreach 遍历,重新赋值给一个新的数组,在此数组中设置键名为驼峰形式。方案二为在 select 查询语句中重命名字段名为驼峰形式。最终决定采纳方案二。


    public function __invoke($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        $themeId = $rootValue['themeAssets']['theme_id'];

        $themeAssets = ThemeAsset::where('theme_id', $themeId)
            ->select(
                'id',
                'theme_id as themeId',
                'version',
                'content',
                'asset_key as key',
                'mime_type as mimeType',
                'category',
                'schema',
                'created_at as createdAt',
                'updated_at as updatedAt'
            )
            ->get();

        return $themeAssets;
    }


5、请求接口,响应字段名为驼峰形式。符合预期。如图3
请求接口,响应字段名为驼峰形式。符合预期
图3
6、查看日志中的生成的原生 SQL 语句。如图4
查看日志中的生成的原生 SQL 语句
图4


select
  `id`,
  `theme_id` as `themeId`,
  `version`,
  `content`,
  `asset_key` as `key`,
  `mime_type` as `mimeType`,
  `category`,
  `schema`,
  `created_at` as `createdAt`,
  `updated_at` as `updated_at`
from
  `theme_asset`
where
  `theme_id` = 'vogue'


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理