Laravel 框架模型的定义 模型的增删改 批量赋值和软删除 ⑧

news2024/10/7 20:25:49

请添加图片描述

@作者 : SYFStrive

 
请添加图片描述

@博客首页 : HomePage

📜: THINK PHP

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:觉得文章不错可以点点关注 👉:专栏连接🔗


请添加图片描述
相关专栏

👉 VUEJS(🔥)
👉 MYSQL(🔥)
👉 微信小程序(🔥)
👉 PHPMYSQL(🔥)
👉 UNIAPP开发(🔥)

目录

  • PHP LARAVEL 简介
  • PHP LARAVEL 模型的定义
  •    默认设置
  •    模型定义
  • PHP LARAVEL 模型的增删改
  •    默认模型的增删改操作
  • 批量赋值和软删除
  •    批量赋值
  •    软删除
  • 最后


                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

提示:以下是本篇文章正文内容

PHP LARAVEL 简介

  • Laravel是一种流行的开源PHP Web应用程序框架,由Taylor Otwell在2011年创建并发布。它提供了一个简洁优雅的语法和丰富的功能集,旨在使Web开发过程更快速、简单和愉悦。
  1. MVC架构模式:Laravel采用了MVC(Model-View-Controller)架构模,将应用程序的逻辑分为不同的层,提高了代码的可维护性和可测试性。

  2. 简洁的语法和表达力:Laravel框架支持具有简洁而表达力的语法,使得编写清晰、易读、易维护的代码成为可能。

  3. 路由系统:它提供了一个强大且灵活的路由系统,通过简单的配置和代码即可定义Web应用程序的路由规则,实现URL到控制器的映射。

  4. 数据库抽象层:Laravel提供了一个简便的数据库抽象层,支持多种数据库系统,并通过Eloquent ORM提供了一种优雅的方法来与数据库进行交互。

  5. 权限和认证系统:Laravel提供了内置的身份验证和授权功能,使得实现用户身份验证、访问控制和权限管理变得简单和便捷。

  6. 缓存系统:Laravel支持多种缓存后端,包括文件、数据库、Memcached和Redis等,让你可以轻松地实现缓存数据,提升应用程序的性能。

  7. 强大的扩展性:Laravel通过Composer和Packagist等工具提供了丰富的扩展包生态系统,可以快速集成各种功能组件和第三方库,加快开发进程。

  8. 测试支持:Laravel鼓励编写和运行测试,提供了一套丰富的测试工具和断言,帮助开发者确保代码的质量和可靠性。

  • 总的来说,Laravel框架以其易用性、优雅的语法、丰富的功能和强大的扩展性受到了广大开发者的喜爱。它提供了

PHP LARAVEL 模型的定义

   默认设置

  1. 创建模型

php artisan make:model APP/Http/Models/User

  1. 而调用的时候,我们也知道表名要遵循它默认规则,修改为复数,或 特定;
class User extends Model
{
	protected $table = 'user';
}
  1. 系统假定你的主键为 id,如果你要修改默认主键,可以特定;

protected $primaryKey = 'XXXid';

  1. 系统假定你的主键 id 为自增性,意味着是主键会自动转换 int 类型;
  2. 如果你希望不是非自增,非数值类型主键,可以设置取消;

public $incrementing = false;

  1. 如果你主键不是一个整数,那么需要$keyType 设置为 string;

protected $keyType = 'string';

  1. 系统默认情况下会接管 created_at 和 updated_at 两个时间戳列;
  2. 如果不想让系统干涉这两个列,可以设置 false 取消;

public $timestamps = false;

  1. 如果你想自定义时间戳的格式,可以设置;

protected $dateFormat = 'U';

  1. 可以更改创建时间 created_at 和更新时间 updated_at 字段名;

const CREATED_AT = 'create_time';

const UPDATED_AT = 'update_time';

  1. 默认读取 database.php 配置的数据库连接,也可以在模型端局部更改;

protected $connection = 'mysql';

   模型定义

PHP LARAVEL 模型的增删改

  1. 比如,我们要查询所有数据,直接使用模型::all()即可;
//查询所有记录
$users = User::get(); //或 all()
return $users;
  1. 也可以像查询构造器一样,添加各种各样的条件,写法一样;
//查询性别为男,价格大于 90,限制显示 2 条
$users = User::where(
    ['id' => 1]
)->limit(2)->get();
return $users;
//or
$users = Book::where([
    ['id', '=', 1],
])->limit(2)->get();
return $users;
  1. 虽然安装了插件,但模型还是没有代码提示,可以通过安装插件解决

``composer require barryvdh/laravel-ide-helper

``php artisan ide-helper:generate – 为 Facades 生成注释

``php artisan ide-helper:models – 为数据模型生成注释

``php artisan ide-helper:meta – 生成 PhpStorm Meta file

  1. 这里列出官网给出示例的方法,对照实验(结合详细文档,重复较多);

(1) .find(1) //通过主键查找
(2) .first() //查找第一个
(3) .firstWhere() //找到查询中的首个
(4) .find([1,2,3]) //通过数组查找
(5) .firstOr() //查找首个返回,支持闭包
(6) .firstOrFail() //找不到时返回异常
(7) .count()、max()等集合 //集合操作

$user = Book::select('id')->find()->max();
$users = Book::max('id');
return $users;

eg:还有很多在查询构造器中的方法,比如排序、分组子查询等等都可以使用

   默认模型的增删改操作

  1. 新增方法如下,注意:默认模型接管 created_at 和 updated_at;
$BookModel = new BookModel();
$BookModel->name = '辉夜';
$BookModel->user_id = 1;
$BookModel->price = 123;
$result = $BookModel->save();
return $result;

//or

$users = BookModel::find(1);
$users->name = '夜123辉';
$users->save();
  1. 更新,只要是查找到一条数据的情况下使用 save() 就是更新;
  2. 使用 update()方法实现批量更新;
$result = BookModel::where('id', 1)
    ->update([
        'name' => '小XX辉夜'
    ]);
return $result;
  1. 使用 create()方法实现新增,但需要在模型端设置批量赋值的许可
BookModel::create([
    'name' => '辉夜',
    'user_id' => 1,
    'price' => 123,
]);

设置批量赋值的许可

//许可批量赋值,默认不可
protected $fillable = [
    'name',
    'price',
    'user_id',
];

注意❗:不许可的批量赋值,不可 和 $fillable 同时使用

//protected $guarded = [‘uid’];

//如何取消批量赋值限制,直接如下

protected $guarded = [];

eg:必须在模型中定义批量赋值的可填充字段,否则无法生效;防止用户不小心设置新值;

  1. 使用 delete()方法,可以删除数据;
$users = BookModel::find(24);
$users->delete();
return $users;
//批量删除
$users = BookModel::where('name', '123123');
$users->delete();
return $users;
  1. 如果你是通过主键 id 删除,那使用 destroy(id)方法,免去查询操作;
//通过主键删除
$users = BookModel::destroy(31);
return $users;

批量赋值和软删除

   批量赋值

  1. 一般情况下,是为了防止提交过来的字段在部分场景中不需要或不能;
  2. 所以,我们需要通过黑白名单机制进行过滤掉必要的字段;
//通过提交过来的数据一次性新增
User::create(Request::all());

   软删除

  1. 什么叫软删除?它相对于真实的删除,而并非真正的删除,只是隐藏了;
  2. 首先,需要在数据库创建一个字段 deleted_at(默认),用于判断是否被软删除;

在这里插入图片描述

  1. 默认设置这个字段为空(null),如果写入数据,成为非空状态则说明被删除
  2. 开启软删除的功能,需要在模型端设置一下

//开启软删除功能
use SoftDeletes;

  1. 当开启了软删除功能,之前的删除操作,都会变成更新操作,给 deleted_at 赋值;
//删除一
$users = User::find(82);
$users->delete();
//删除二
User::destroy(81);
  1. 而当我们开启了软删除的功能后,此时通过正常的数据获取列表,会自动隐藏;
//软删除的数据不可见
$users = User::get();
return $users;
//单独获取被软删除的数据不行 ❌
$users = User::find(66);
return $users;
  1. 如果需要查询包含软删除的数据,通过 withTrashed()方法实现;
//获取包含软删除的数据
$users = User::withTrashed()->get();
return $users;

//获取某个被软删除的数据(即使不是软删除的也可以搜索到)
$users = User::withTrashed()->find(66);
return $users;
  1. 如果只想搜索出被软删除的数据,通过 onlyTrashed()方法实现;
//获取所有软删除的数据
$users = User::onlyTrashed()->get();
return $users;

//获取某个被软删除的数据···(只有软删除的数据才可以被搜索到)
$users = User::onlyTrashed()->find(66);
return $users;
  1. 如果要对这个数据进行软删除的判断,是否是被软删除的,可以使用trashed();
//判断是否是被软删除的数据
$users = User::withTrashed()->find(66);
return $users->trashed();
  1. 如果想将软删除的数据恢复正常(类似从回收站还原),使用 restore()方法;
//将被软删除的数据回复正常
$users = User::onlyTrashed()->find(66);
$users->restore();
  1. 如果开启了软删除,还需要强行真实的永久删除,可以使用 forceDelete()方法;
//开启软删除时的真实永久删除
$users = User::onlyTrashed()->find(66);
$users->forceDelete();

最后

以上是个人学习 THINKPHP 的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/904000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker 安装 Wordpress 用lnmp搭建出现的故障

第一个故障就是mysql出现的故障了 你起mysql镜像是这么起的导致pid号用不了 docker run --namemysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp 解决方法 docker run --namemysql -d --privilege…

【ARM-Linux】项目,语音刷抖音项目

文章目录 所需器材装备操作SU-03T语音模块配置代码(没有用wiring库,自己实现串口通信)结束 所需器材 可以百度了解以下器材 orangepi-zero2全志开发板 su-03T语音识别模块 USB-TTL模块 一个安卓手机 一根可以传输的数据线 装备操作 安…

【Python数据挖掘】应用toad包中的KS_bucket函数统计好坏样本率、KS值

大数据时代的到来,使得很多工作都需要进行数据挖掘,从而发现更多有利的规律,或规避风险,或发现商业价值。比如在支付领域,通过挖掘商户的交易数据,分析商户是否有欺诈、盗刷、赌博、套现等风险。对于有风险…

孤注一掷——基于文心Ernie-3.0大模型的影评情感分析

孤注一掷——基于文心Ernie-3.0大模型的影评情感分析 文章目录 孤注一掷——基于文心Ernie-3.0大模型的影评情感分析写在前面一、数据直观可视化1.1 各评价所占人数1.2 词云可视化 二、数据处理2.1 清洗数据2.2 划分数据集2.3 加载数据2.4 展示数据 三、RNIE 3.0文心大模型3.1 …

自己实现 SpringMVC 底层机制 系列之--实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml

😀前言 自己实现 SpringMVC 底层机制 系列之–实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家&#xff…

如何根据蛋白质序列找到蛋白质ID

多数数据集中有蛋白质序列但不存储蛋白质ID,这使得PDB文件获取困难,如何找到蛋白质序列对应的ID,参考以下(还没有找到批处理方法,如果有知道的小伙伴评论区留言): 1. 进入官方网站:…

java 用协程 实现 简单下订单功能

java 用协程有几种方式,本文是是基于kotlin的协程库实现。 kotlin 协程原理 Kotlin 的协程(Coroutines)是一种在 Kotlin 语言中实现异步编程的轻量级工具。它可以实现更简洁和可读性更高的异步代码,并且不需要显式地使用回调函数…

0基础入门C++之类和对象中篇

目录 1.类的6个默认成员函数2.构造函数2.1概念2.2特性 3.析构函数3.1概念3.2特性 4.拷贝构造函数4.1概念4.2 特性 5.赋值运算符重载5.1运算符重载5.2赋值重载5.3赋值运算符重载特性 6.const成员7.取地址及const取地址操作符重载 1.类的6个默认成员函数 通过类和对象上篇的学习&…

操作系统——操作系统内存管理基础

文章目录 1.内存管理介绍2.常见的几种内存管理机制3.快表和多级页表快表多级页表总结 4.分页机制和分段机制的共同点和区别5.逻辑(虚拟)地址和物理地址6.CPU 寻址了解吗?为什么需要虚拟地址空间? 1.内存管理介绍 操作系统的内存管理主要是做什么? 操作系统的内存…

solidwords(6)

从右视图开始,分上下两部分 标题 这里的薄壁要留意一下怎么算的(单向:默认向内;如果想向外记得选反向)

Vue2+Vue3笔记(尚硅谷张天禹老师)day01

只是记录,初心是为了让页面更好看,会有错误 环境准备 下载vue:Vue下载 下面两个是可选的,主要是我想让控制台干净点 vue_dev_tool安装 vue_dev_tool安装 : Vue 控制台出现You are running Vue in development mode. Make sure to turn on production mode when dep…

unity之Input.GetKeyDown与Input.GetKey区别

文章目录 Input.GetKeyDown与Input.GetKey区别 Input.GetKeyDown与Input.GetKey区别 Input.GetKey 和 Input.GetKeyDown 是 Unity 中用于检测按键状态的两个不同函数。它们之间的区别在于何时触发。 Input.GetKey(KeyCode key): 这个函数会在用户按住指定的键时触发&#xff0…

CountDownLatch和CyclicBarrie

前置提要 什么是闭锁对象 闭锁对象(Latch Object)是一种同步工具,用于控制线程的等待和执行顺序。闭锁对象可以让一个或多个线程等待,直到特定的条件满足后才能继续执行。 在Java中,CountDownLatch就是一种常见的闭锁对…

【AI大模型】训练Al大模型

大模型超越AI 前言 洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 目前所指的大模型,是“大规模深度学习模型”的简称,指具有大量参数和复杂结构的机器学习模型,可以处理大规模的数据和复杂的问题&#x…

C语言刷题指南(三)

📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

JS-Array数组方法reduce()

reduce方法 // 可以与箭头函数一起使用 array.reduce((total,curVal) > total curVal, initVal) array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 例子: // a:总和/累加项 // c:每一项的值 const allCount compu…

实验三 nfs 服务器环境搭建

nfs 服务器环境搭建 nfs(Network File System)即网络文件系统,其基于UDP/IP 使用nfs能够在不同计算机之间通过网络进行文件共享,能使使用 者访问网络上其它计算机中的文件就像在访问自己的计算机一样。 【实验目的】 掌握 nfs 环…

RT1052的XBAR

文章目录 XBAR2函数2.1 XBARA_Init2.2XBARA1_Signal_Set XBAR XBAR 是 RT1052 芯片自带的内部外设交错开关矩阵 它可以将 RT1052 内部外设的输出(或 IO 口的输入)映射到另外一部分内部外设的输入(或 IO 口的输出)上,…

WordPress用于您的企业网站的优点和缺点

如今,WordPress 被广泛认为是一个可靠、可扩展且安全的平台,能够为商业网站提供支持。然而,许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点,您可以确定世界上最受欢…

低代码自动化解析:企业所需了解的全面指南

根据2020年以来与低代码技术相关的积极趋势,Gartner预测到2023年低代码开发技术市场将增长20%。此外,他们还预计,到2026年,非正式IT部门的开发人员将占低代码开发工具用户群至少80%的比例,而这一比例在2021年为60%。基…