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

这篇具有很好参考价值的文章主要介绍了laravel数据库模型蛇形命名自动转换驼峰命名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2023年6月20日15:10:59

我看了各种方案,但是多多少少都有各种问题
建议使用 GitHub - kirkbushell/eloquence: A drop-in library for certain database functionality in Laravel, that allows for extra features that may never make it into the main project.

安装

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,为什么要有这个命名转化为驼峰命名的插件呢?其实为了代码风格统一,方便开发习惯


缺点
 


Admin::where('name', 'admin')->update(['token' => $toked, 'tokenTime' => date('Y-m-d H:i:s', time())]);

sql:
update `admin` set `token` = bd1066d7181192f555431503c3a04086, `tokenTime` = 2023-06-25 09:00:26 where `name` = admin

这样操作会出现`update`等操作数组,`复杂SQL`,`原生SQL`都不会激活自动转换驼峰,蛇形转换文章来源地址https://www.toymoban.com/news/detail-496183.html

到了这里,关于laravel数据库模型蛇形命名自动转换驼峰命名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Jetpack】Room 中的销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )

    在 Android 中使用 Room 操作 SQLite 数据库 , 如果 SQLite 数据库表 修改比较繁琐 , 如 : 涉及到 修改 数据库表字段的数据类型 , 需要逐个修改数据库值 ; 该环境下 使用 销毁 和 重建策略 是 最佳的方案 ; 销毁 和 重建策略 执行步骤 : 以 Table 表为例 , 要对 Table 表中的数据进行繁琐的

    2024年02月08日
    浏览(52)
  • 【IDEA使用指南】使用Hibernate框架的Java项目,如何通过数据库表自动生成实体模型?

    步骤1:找到并打开“Persistence”工具栏。 如下图所示,找到 “View - Tool Windows - Persistence”,点击“Persistence”。 步骤2:找到并打开“Import Database Schema” 窗口。 在开发工具左下角会弹出持久化配置的工具栏“Persistence”,如下图所示。单击之后有一个弹框,找到弹框中的项

    2024年02月05日
    浏览(59)
  • 在springboot项目中配置数据库下划线命名映射为java的驼峰命名时出错

    在使用spirngboot集成mybaits的时候,想要开启命名映射,如图配置 项目中配置了mybatis-config.xml mybatis-config.xml文件中的配置 错误信息 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method ‘sqlSessionFactory’ threw exception;

    2024年02月04日
    浏览(40)
  • 【Django】让SQLite数据库中表名支持重命名的方法

    修改了数据库表名之后,更新数据库时跳错: 意思就是 SQLite 数据库不支持重命名的操作,添加atomic = False即可: Migration 在 py36Libsite-packagesdjangodbmigrationsmigration.py 的位置 将 atomic = True 改成 atomic = False

    2024年02月10日
    浏览(51)
  • 【postgresql 基础入门】基础架构和命名空间层次,查看数据库对象再也不迷路

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 ​ 开源贡献 : toadb开源库 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 入门准备 postgrersql基础架构 快速使用 初始化集群 数据库服务管理 psql客户

    2024年02月09日
    浏览(54)
  • 企业级JAVA、数据库等编程规范之命名风格 —— 超详细准确无误

     🧸欢迎来到dream_ready的博客,📜相信你对这两篇博客也感兴趣o (ˉ▽ˉ;) 📜 表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学 📜 用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方

    2024年02月06日
    浏览(53)
  • MySQL-创建和管理表:基础知识、创建和管理数据库、创建表、修改表、重命名表、删除表、清空表、拓展

    注:此为笔者学习尚硅谷-宋红康MySQL的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:尚硅谷!!! 1.1 一条数据存储的过程 存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团

    2024年04月11日
    浏览(89)
  • mysql数据库自动备份

    服务器中数据库的数据是最重要的东西,如果因为某些情况导致数据库数据错误,数据错乱或数据库崩溃,这时一定要及时的修复,但如果数据丢失或数据没法用了,这时就要回滚数据了,而这时就需要我们经常的备份数据库的数据 一般别人都会推荐使用Navicat来备份和连接数据库,但

    2024年02月02日
    浏览(56)
  • pgsql数据库自动备份

    本文的写作原因:对实际客户需求的一次小总结,顺带做一次笔记 任何数据库都需要备份,备份数据是维护数据库必不可少的操作。 数据库备份常见的应用场景: 硬件故障造成数据库部分数据或全部数据丢失 人为操作失误造成某些数据被误操作 软件 BUG 造成部分数据或全部

    2024年02月08日
    浏览(45)
  • SQL Server数据库使用SQL Server代理实现数据库自动备份

    在现实中,为了保证数据的安全和完整,防止人为错误和硬件故障等造成的数据丢失和损坏,就需要用到数据库的备份,不同的数据库方法有所差别,我这边主讲SQL Server数据库的备份和使用SQL Server代理作业实现数据库的定时备份。 目录 一、开启SQL Server代理 1、找到SQL Serv

    2024年02月09日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包