laravel数据库模型蛇形命名自动转换驼峰命名

news/2024/10/31 5:36:39/

2023年6月20日15:10:59

我看了各种方案,但是多多少少都有各种问题
建议使用 https://github.com/kirkbushell/eloquence

安装

composer require kirkbushell/eloquence

添加到 provider

添加 eloquence service provider 在你的 config/app.php 文件中

'providers' => [/** Application Service Providers...*/Eloquence\EloquenceServiceProvider::class,],

使用方法

在模型添加 use \Eloquence\Behaviours\CamelCasing;

<?php
namespace App\Models;use Eloquence\Behaviours\CamelCasing;
use Illuminate\Database\Eloquent\Model;class Feedback
{use CamelCasing;protected $table = 'feedback';protected $primaryKey = 'id';protected $guarded = [];public $timestamps = false;
}

以下是注意的几点:

1,add save的时候你的模型的对象属性是蛇形命名还是驼峰命名都是可以,因为在包里调用的

Str::snake($key)方法,如果是蛇形命名就不会改变,是驼峰就会转换成蛇形,例如:

isset($where['nickName']) && $feedback->nickName = $where['nickName'];
$res = $feedback->save();数据库的字段是:nick_name

2,返回数据的时候,会自动驼峰转换

{"code": 200,"msg": "操作成功","data": {"count": 2,"list": [{"id": 13,"nickName": "33333","contact": "11111","content": "2222","createAt": "2023-06-21 09:58:23","updateAt": "2023-06-21 09:58:23","platform": "PC","lang": "zh-CN"}]}
}数据库的结构:
CREATE TABLE `feedback` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',`nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '反馈昵称',`contact` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '联系方式',`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '反馈内容',`create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`platform` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'PC' COMMENT '平台类型',`lang` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'zh-CN' COMMENT '语言类型',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='反馈表';

3,联表测试返回的数据

$banner = Banner::with(['admin_zx']);class Banner extends Model
{use CamelCasing;protected $table = 'banner';protected $primaryKey = 'id';protected $guarded = [];public $timestamps = false;public function admin_zx(){return $this->hasOne(Admin::class, 'id', 'admin_id');}
}返回数据:{"id": 37,"name": "百亿","adminId": 5,"url": "l","sort": 11,"startTime": null,"endTime": null,"createAt": "2022-01-21 15:50:50","updateAt": "2022-01-23 22:52:56","picPath": "/upload/image/20190322/57da8821d96f8391b084757a8d41e072.jpg","videoPath": null,"platform": "10","lang": "zh-CN","adminZx": {"id": 5,"name": "admin","password": "c3284d0f9","salt": "","sex": 3,"email": "","mobile": "","loginIp": "","status": 1,"avatar": null,"realName": "admin","loginTime": "2023-03-21 08:31:03","adminGroupIds": "9","isAdmin": 1,"sort": 255,"createAt": "2022-01-21 15:45:09","updateAt": "2023-03-21 08:31:03"}
},

4,使用属性自定义处理,不会影响返回nick_name转化成驼峰

class Feedback extends Model
{use CamelCasing;protected $table = 'feedback';protected $primaryKey = 'id';protected $guarded = [];public $timestamps = false;public function getNickNameAttribute($value){return !empty($value) ? json_decode($value, true) : '';}public function setNickNameAttribute($value){$this->attributes['nick_name'] = !empty($value) ? json_encode($value) : '';}
}

5,一些基础问题说明

1,为什么要用驼峰命名数据库,这个主要是个人习惯,但是类名,方法名,变量名laravel中大多数是驼峰
2,全部使用蛇形命名有什么问题吗?答:没问题
3,全部使用驼峰命名有什么问题吗?答:没问题
4,为什么要有这个命名转化为驼峰命名的插件呢?其实为了代码风格统一,方便开发习惯


http://www.ppmy.cn/news/516179.html

相关文章

红色警戒终极版

红色警戒终极版 Description 在一局红色警戒游戏中&#xff0c;你代表的是英国势力&#xff0c;此时你迫切需要生产坦克来应对敌人的进攻&#xff0c;坦克分为灰熊坦克、幻影坦克、光棱坦克、天启坦克四种&#xff0c;价格分别为600、1000、1200、1750&#xff0c;生产时间分别…

#家庭网络配置(华为路由与交换机)

#家庭网络配置 #三层交换机配置 #打开HDCP功能 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #打开DHCP 使能 [Huawei]dhcp enable #创建vlan 10 vlan 20 vlan 2 [Huawei]vlan batch 2 10 20 #进入 vlan 并配置ip 与 dhcp […

[进阶]网络通信:TCP通信-支持与多个客户端同时通信

目前我们开发的服务端程序&#xff0c;是否可以支持与多个客户端同时通信&#xff1f; &#xfeff;不可以的。&#xfeff;因为服务端现在只有一个主线程&#xff0c;只能处理一个客户端的消息。 代码演示如下&#xff1a; 客户端&#xff1a; public class Client {public…

最小二乘支持向量机”在学习偏微分方程 (PDE) 解方面的应用(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

函数重载与函数匹配

函数匹配过程&#xff1a; 1.候选函数&#xff1a;选择与函数名同名的所有重载函数集合&#xff0c;包括模板&#xff0c;模板具体化&#xff0c;非模板函数&#xff1b; 2.可行函数&#xff1a;根据函数特征标选择能被这组实参调用的函数 3.寻找最佳匹配&#xff1a; 多个形…

OPPOR9s 官方原厂售后线刷包救砖包解账户锁屏幕锁

R9S下载地址&#xff1a; https://pan.baidu.com/s/1hfGw31ymr5Ph0ARL7aRNAA

9008刷机工具_黔隆科技刷机教程OPPOR9S忘记密码免刷机保资料解屏幕锁教程

手机刷机解锁你还在大海捞针的寻找方法吗?告诉你个黑科技,关注微信公众号黔隆科技后回复刷机+手机型号,系统就会自动为你寻找最适合的刷机解锁教程,省时又省力。 OPPOR9S出来已经有一段时间了,相信大家都体验到了新机的强大了吧 !可使用时难免会发生一些意外,比如密码忘…

oppo9s刷机教程_OPPOR9S海外版官方固件刷机教程_线刷|救砖教程图解

三:oppoR9s使用OPPO自带工具线刷教程详解 1、安装驱动(有两个驱动都是需要安装的,驱动在线刷包里,下载即可看到) ①安装驱动1,如下图所示: ②安装驱动2,如下图所示: 2、打开工具,如下图所示(记住用管理员身份运行) 解压刷机包前,请关闭一切杀毒软件,如果误删了文件,…