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

请添加图片描述

@作者 : 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.mzph.cn/news/45107.shtml

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

相关文章

chatgpt汇编,两个关于chatgpt的问题

1.用C写一个高级的可自主学习的AI语言模型 编写一个高级的可自主学习的AI语言模型是一个复杂且庞大的工程,需要深入的专业知识和大量的时间精力。下面是一个简化的示例,演示如何使用C实现一个基本的可自主学习的AI语言模型。 首先,你需要定…

ffmpeg将图片压缩成视频过程中的问题记录

问题描述:服务器集群上在使用如下命令对img_path文件夹下的图片(图片名1.jpg……300.jpg)进行批量合成视频过程中,ffmpeg创建完视频文件后,写入过程中,自动kill,捕获异常为空。问题原因:集群pods的内存不够…

python读取word/pdf文档,指定文字内容和图片

读编号转文件夹目录然后放图片进去那个 一 先将word转为PDF pdf 读起来比较方便, 按页码读取文件: import pdfplumber from PIL import Image import cv2 import numpy as np import re import os import logging import iodef create_folder(folder_name):if not…

django sqlite3操作和manage.py功能介绍

参考链接:https://www.cnblogs.com/csd97/p/8432715.html manage.py 常用命令_python manage.py_追逐&梦想的博客-CSDN博客 python django操作sqlite3_django sqlite_浪子仙迹的博客-CSDN博客

linux 搭建 nexus maven私服

目录 环境: 下载 访问百度网盘链接 官网下载 部署 : 进入目录,创建文件夹,进入文件夹 将安装包放入nexus文件夹,并解压​编辑 启动 nexus,并查看状态.​编辑 更改 nexus 端口为7020,并重新启动,访问虚拟机7020…

SpringBoot + Vue 前后端分离项目 微人事(九)

职位管理后端接口设计 在controller包里面新建system包,再在system包里面新建basic包,再在basic包里面创建PositionController类,在定义PositionController类的接口的时候,一定要与数据库的menu中的url地址到一致,不然…

JavaScript(JavaEE初阶系列13)

目录 前言: 1.初识JavaScript 2.JavaScript的书写形式 2.1行内式 2.2内嵌式 2.3外部式 2.4注释 2.5输入输出 3.语法 3.1变量的使用 3.2基本数据类型 3.3运算符 3.4条件语句 3.5循环语句 3.6数组 3.7函数 3.8对象 3.8.1 对象的创建 4.案例演示 4…

【hive】hive修复分区或修复表 以及msck命令的使用

【hive】hive修复分区或修复表 以及msck命令的使用 文章目录 【hive】hive修复分区或修复表 以及msck命令的使用问题原因:解决方法:msck命令解析:例子: 问题原因: 之前hive里有数据,后面存储元数据信息的MySQL数据库坏…

rocketBot使用/Rpc调用监控

9 RocketBot使用 这里可以获取到比较详细的地方。可以通过追踪id的方式进行查询。只支持精准查询。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvGvUo6l-1692459587743)(C:\Users\15870\AppData\Roaming\Typora\typora-user-images\image-202308…

Linux 系统编程拾遗

Linux 系统编程拾遗 进程的创建 进程的创建 fork()、exit()、wait()以及execve()的简介 创建新进程:fork()

【ARM v8】如何在ARM上实现x86的rdtsc()函数

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表

题目一: 54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/ 题目要求: 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可…

滑块验证码-接口返回base64数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言所需包图片示例使用方法提示前言 滑动验证码在实际爬虫开发过程中会遇到很多,不同网站返回的数据也是千奇百怪。这里分享一种接口返回base64格式的情况以及处理方式 所需包 opencv-python、…

vue3 路由缓存问题

目录 解决问题的思路: 解决问题的方案: 1、给roter-view添加key(破坏复用机制,强制销毁重建) 2、使用beforeRouteUpdate导航钩子 3、使用watch监听路由 vue3路由缓存:当用户从/users/johnny导航到/use…

比较杂的html元素

文章目录 abbrtimebqblockquotebrhrmetalink abbr 表示缩写 time 踢动给浏览器或搜索引擎阅读的事件;看着没什么效果 b 以前是一个无语义元素,主要用于加粗字体,有了css之后,加粗就不需要b元素了。 现在作为提醒注意&#xf…

C#判断字符串中有没有字母,正则表达式、IsLetter

要判断字符串中是否包含字母,可以使用正则表达式或者循环遍历字符串的方式。 方法一:使用正则表达式 using System.Text.RegularExpressions;string input "Hello123"; bool containsLetter Regex.IsMatch(input, "[a-zA-Z]");上…

【Java】Maven配置文件帮助文档(settings.xml 和 pom.xml)

文章目录 1. settings.xml1.1 localRepository1.2 interactiveMode1.3 offline1.4 pluginGroups1.5 proxies1.6 servers1.7 mirrors1.8 profiles1.9 activeProfiles 2. pom.xml2.1 本项目信息2.2 父项目信息2.3 prerequisites2.4 issueManagement2.5 ciManagement2.6 inception…

Linux网络编程:Socket套接字编程(Server服务器 Client客户端)

文章目录: 一:定义和流程分析 1.定义 2.流程分析 3.网络字节序 二:相关函数 IP地址转换函数inet_pton inet_ntop(本地字节序 网络字节序) socket函数(创建一个套接字) bind函数(给socket绑定一个服务器地址结…

Git概述

目录 一、什么是Git 二、什么是版本控制系统 三、Git和SVN对比 SVN集中式 SVN优缺点 Git分布式 Git优缺点 四、Git工作流程 四个工作区域 工作流程 五、Git下载与安装 一、什么是Git 很多人都知道,林纳斯托瓦兹在1991年创建了开源的Linux,从…

不是说嵌入式是风口吗,那为什么工作还那么难找?

最近确实有很多媒体、机构渲染嵌入式可以拿高薪,这在行业内也是事实,但前提是你有足够的竞争力,真的懂嵌入式。 时至今日,能做嵌入式程序开发的人其实相当常见,尤其是随着树莓派、Arduino等开发板的普及,甚…