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

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

时间:2023-06-21 12:22:23浏览次数:47  
标签:laravel COMMENT 21 utf8mb4 DEFAULT 蛇形 命名 NULL id

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": "c3284d0f94606de1fd2af172aba15bf3",
		"salt": "",
		"sex": 3,
		"email": "",
		"mobile": "",
		"loginIp": "113.110.200.178",
		"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转化成驼峰

    public function getNickNameAttribute($value)
    {
        return !empty($value) ? json_decode($value, true) : '';
    }

    public function setNickNameAttribute($value)
    {
        $this->attributes['nick_name'] = !empty($value) ? json_encode($value) : '';
    }

标签:laravel,COMMENT,21,utf8mb4,DEFAULT,蛇形,命名,NULL,id
From: https://www.cnblogs.com/zx-admin/p/17493699.html

相关文章

  • 【web开发】PHP命名空间的别名和导入
    前言前面两篇文章我们详细介绍了PHP命名空间的定义和基本使用以及命名空间相关术语解读,对PHP的命名空间的有了更多的了解,本文我们再深入探索PHP命名空间的更多使用技巧。废话不多说,直接上菜。命名空间的别名和导入涉及到命名空间的使用,命名空间中的别名和导入这俩个概念我们是无法......
  • 【web开发】PHP命名空间中的子空间和公共空间详解及相关术语解读
    前言PHP的命名空间和文件系统的结构很像,文件夹可以有子文件夹,命名空间中也可以定义子空间来描述各个空间之间的所属关系。比如:cart购物车和order订单这两个模块都处于同一个shop商城项目内,通过命名空间子空间表达关系的:<?phpnamespaceshop\cart;classDemo{ //类的成员}name......
  • 使用NamedParameterJdbcTemplate指定命名参数
    在本文中,我们将介绍如何在连接到后端Postgres数据库的Spring启动应用程序中使用NamedParameterJdbcTemplate。我们将使用NamedParameterJdbcTemplate从PostgresDB插入,更新和删除员工。为了保持设计的合理性,我将dao,service和controller分开了。服务只是本文的一个转折点。概观Named......
  • 命名规范
    1.类名定义DO,VO,BO,DTO,DAO不需要遵循驼峰命名规范,都大写AlarmDetailsDTO✔️AlarmDetailsDtoX2.常量常量应该都是大写,多个单词用_间隔3.包名统一使用小写.分隔,且是自然语义的单词4.布尔类型变量命名不要加is,防止序列化异常Booleansuccess5.变量命名的含义一定......
  • #yyds干货盘点#C++命名空间
    命名空间命名空间是C++语言的新特性,它能够解决命名冲突问题。例如,小明定义了一个函数swap(),C++标准程序库中也存在一个swap()函数。此时,为了区分调用的是哪个swap()函数,可以通过命名空间进行标识。C++中的命名空间包括两种,具体介绍如下。usingnamespacestd;1.标准命名空间std是C+......
  • Java 命名规范
    包命名规范包(Package)的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包名使用小写英文字母进行命名,并使用“.”进行分割,每个被分割的单元只能包含一个名词。一般地,包命名常采用顶级域......
  • 机器翻译中的文本分类与命名实体识别
    目录《机器翻译中的文本分类与命名实体识别》摘要:机器翻译是当前人工智能技术领域的一个重要应用方向,而文本分类与命名实体识别是机器翻译中的核心任务之一。本文将介绍机器翻译中的文本分类与命名实体识别技术原理和实现步骤,并通过应用示例和代码实现讲解,深入探讨了优化和改进......
  • HHDESK批量重命名功能在工作中的实际运用
    笔者自认为有个很好的习惯,每个完成的工作,都会新建一个文件夹,放在工作文件夹下面,并且分类很细,详细命名,方便查找,万一遗忘也没关系,关键字和时间一搜索即可。所以在今天,同事提供了任务日期,让我找一个文档时,按照关键字在文件夹内一搜索,没有找到——因为有时候太忙,有些文件夹我并没有......
  • git分支重命名
    重命名本地分支gitbranch-mnew_branch_name删除远程分支gitpush--deleteoriginold_branch_name上传新命名的本地分支gitpushoriginnew_branch_name关联修改后的本地分支与远程分支gitbranch--set-upstream-toorigin/new_branch_name......
  • 机器翻译中的文本分类与命名实体识别
    目录《机器翻译中的文本分类与命名实体识别》摘要:机器翻译是当前人工智能技术领域的一个重要应用方向,而文本分类与命名实体识别是机器翻译中的核心任务之一。本文将介绍机器翻译中的文本分类与命名实体识别技术原理和实现步骤,并通过应用示例和代码实现讲解,深入探讨了优化和改进......