在 Laravel 6 中,由于接口响应的字段名称为驼峰形式,而表字段名称为小写字母加下划线的形式,相互转换的处理
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
<?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; } }
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
6、查看日志中的生成的原生 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'
近期评论