在 Laravel 6 中,由于接口响应的字段名称为驼峰形式,而表字段名称为小写字母加下划线的形式,相互转换的处理
1、表字段名称为小写字母加下划线的形式。如图1
2、接口基于 GraphQL 实现,规范为接口响应的字段名称需为驼峰形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?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 查询语句中重命名字段名为驼峰形式。最终决定采纳方案二。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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' |
近期评论