首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过 Laravel Eloquent 模型实现批量赋值和软删除

在上一篇教程中,我们基于 Eloquent 模型实现了对数据表记录的增删改查操作,今天我们在此基础上介绍两个 Eloquent 模型提供的高级功能 —— 批量赋值和软删除。...实现原理 Eloquent 模型类为我们提供了「软删除」功能的支持。这就意味着,在 Laravel 中,我们不需要编写任何额外代码就可以实现对数据库记录的「软删除」。...该字段默认值为 NULL,表示没有被软删除。如果要在模型类中支持软删除,需要在对应模型类(在本例中是 Post 模型)中添加支持软删除的 Trait: 模型类上做所有常规查询操作的时候就会过滤掉被软删除的记录(这些常规查询在上一篇教程中已经给出)。...如果想要在查询结果中出现软删除记录,可以通过在查询的时候调用 withTrashed 方法实现: $post = Post::withTrashed()->find(32); 返回结果和正常查询结果一样

2.5K10

Laravel 软删除存在的问题

1、软删除使用的标记类型是时间类型,通过is null条件查询,删除标记取值不支持定义 //Illuminate\Database\Eloquent\SoftDeletingScope public...,如果类常量DELETED_AT为null,则不执行相应的软删除操作 4、join操作,只会在对当前模型添加软删除查询条件 5、在belonsToMany关联关系中,如果关联表,中间表,被关联表都有软删除字段...被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、在hasManyThrough关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。...但是中间表的软删除不是通过scope实现的,关联关系对象在创建的时候就已经把中间表的软删除条件附加上去了,因此,即使指定了withTrashed,也会有中间表的软删除查询条件。...从上面可以看出,Laravel的软删除,在关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    3分钟短文:Laravel 从软删除说到模型作用域的概念

    引言 上一节我们讲了通过模型方法新建条目,或者更新数据。对于写操作还有更为重要的一个方法, 就是数据的删除。删除数据,有物理删除和软删除的区别。 ?...我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...所以引入了软删除的概念,就是在表内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...然后在模型中,引入软删除的功能,将其进行全局生效的使用。...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。

    1.4K30

    laravel 模型Eloquent ORM 添加编辑删除

    数据中一眼就发现了后三条数据的不同,我们之前用 DB 插入到数据库中的数据 created_at 和 updated_at 字段都是空,而我们用模型插入和修改后 created_at 和 updated_at...当时我希望能有一个恢复删除的功能比如说回收站,laravel 的模型为我们提供了很方便的软删除功能 要启用软删除首先数据表需要有 deleted_at 字段 之前玩迁移的时候简单的说了下创建迁移的时候调用...softDeletes 即可,模型默认是没有开启软删除功能的开启也很简单就是使用SoftDeletes Laravel 的 数据库迁移 有创建这个字段的方法 现在,当你在模型实例上使用 delete 方法, 当前日期时间会写入 deleted_at 字段。...现在刚刚软删除的数据又回来了,如果up只想查询乱删除的数据呢?

    1.7K21

    (转) Laravel Eloquent 提示和技巧

    原文:https://learnku.com/articles/19876#1face4 Eloquent ORM 看起来像一个简单的机制,但在幕后,有很多半隐藏的功能和不太知名的方法来实现更多。...例如,如果您想要某种类型的用户(也是通过电子邮件订购)的特定关系,您可以这样做: public function approvedUsers() { retrun $this->hasMany...BelongsTo Default Models 假设你有Post属于Author,然后是Blade代码: {{ $post->author->name }} 但是如果作者被删除,或者由于某种原因没有设置呢...此外,我们可以将默认属性值分配给该默认模型。...命令行创建模型的同时,创建迁移文件和控制器 laravel创建模型的命令大家都很熟悉: php artisan make:model Company 不过你应该了解另外几个很常用的参数: php artisan

    1.5K30

    django优雅的实现软删除,支持Admin和DRF的软删除

    何为软删除 当你想对数据进行删除的时候,如果使用物理删除,那么数据真的消失了。使用软删除,可以让数据保留,但是不会被真的删除。只是在字段上设置了一个值,表示数据已经被删除。...同样的,DRF对外操作的其他接口,如查询,修改操作,就不允许找到已经软删除的数据。 自带的Admin 既然是超级管理后台,那么就允许操作任何数据,包括已经软删除的,而不是列表找不到软删除的数据。...后台执行删除操作的时候,实际上是对数据进行软删除。...简而言之: drf找不到删除的数据,admin需要全部数据 drf和admin删除数据都是软删除 解决方案 DRF Django Manager 赋予了 Django的模型(Model)中操作数据库的能力...,是软删除。

    2.4K40

    3分钟短文:Laravel 检查记录是否被软删除

    引言 laravel模型中引入了SoftDeletes这个全局作用域用于将数据库的条目 标记为删除,而实际上并不清除数据,这样可以为后续的数据恢复做铺垫。...学习时间 使用软删除功能,比较简单,只需要在模型中使用如下代码类: use Illuminate\Database\Eloquent\SoftDeletes; class User extends Model...,和自定义软删除字段的方法。...使用了软删除功能后,会在模型的查询方法上,默认追加 where deleted_at is null 那么如果使用了全量查询后,如何判断一个记录是否是已经软删除的呢?laravel提供了这些功能。...写在最后 本文通过对laravel模型中软删除的源码分析, 为大家展示了引入软删除功能,并自定义软删除标记字段的方法。通过模型提供的方法,进而判断记录是否已软删除。

    1.5K30

    3分钟短文:Laravel说要用软删除,可不要真删

    所以,软删除的概念,极为重要。 本文我们仍然不厌其烦地讲解软删除的功能。 物理删除 其实就是真实地把数据从数据库条目清除,laravel模型提供了开箱即用的方法。...真实的SQL如下: DELETE FROM events WHERE id = 12; laravel提供了许多语法糖,上面使用 find 和 delete 两个步骤,可以缩减为一个方法 destroy...Laravel本身支持软删除,只需要进行少量的配置更改,以确保在执行delete或destroy时,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...SoftDelete 有了数据库表的支持,我们才能在模型内使用软删除的功能。...如果你在代码内要坚持查询全量数据,也包含软删除了的数据,那么代码这样写: $events = Event::withTrashed()->get(); 写在最后 本文我们有重温了laravel的模型软删除功能

    2.2K00

    linux软链接的创建、删除和更新

    在Linux中,链接分为软的和硬的,至于两者之间有什么差别,大家可以参考下IBM Developer 链接绕不过ln/link 命令(当然,如果你用图形界面的话,接写来你就当我说的是废话了,您可以直接关闭当前页面了.../test 引向/var/www/test 文件夹 ln –s /var/www/test /var/test 删除软链接 和删除普通的文件是一眼的,删除都是使用rm来进行操作 rm –rf...软链接名称(请注意不要在后面加”/”,rm –rf 后面加不加”/” 的区别,可自行去百度下啊) 例如: 删除test rm –rf test 修改软链接 ln –snf [新的源文件或目录] [.../var/test 好了,基本上的增加、删除、修改都在这了。...常用的参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 -n 把符号链接视为一般目录 -s 软链接(符号链接) -v

    3.6K20

    通过 Laravel 表单请求类实现字段验证和错误提示

    在上一篇教程中,我们已经演示了如何在控制器方法中对表单请求字段进行验证,并且提到如果请求字段很多很复杂,都写到控制器方法里面会导致控制器臃肿,从单一职责原则来说需要将表单请求验证拆分出去,然后通过类型提示的方式注入到控制器方法...今天,我们就来实现这个拆分,Laravel 提供了表单请求类的功能帮助我们快速完成这一架构调整。...答案是将其以类型提示的方式注入到请求路由对应的控制器方法即可,在本例中,就是 RequestController 的 form 方法: public function form(SubmitFormRequest...由于该表单请求类也是 Illuminate\Http\Request 的子类,所以后续获取请求字段值也可以通过 $request 来获取,将表单请求验证和请求实例参数合二为一,非常方便。...这样一来,以后我们就可以在表单请求类中维护字段验证逻辑了,完成了请求验证和控制器的解耦。

    3.9K30

    软考高级架构师:内聚类型和耦合类型

    一、AI 讲解 在软件设计中,耦合(Coupling)和内聚(Cohesion)是两个非常重要的概念。它们描述了模块之间和模块内部的关系,理解这些概念有助于设计出高质量的软件系统。...耦合度越低,模块之间的依赖性越小,系统的可维护性和可扩展性越好。...根据耦合的紧密程度,可以将耦合分为以下几种类型: 内容耦合(Content Coupling) 一个模块直接修改或依赖另一个模块的内部数据或控制信息。 耦合度最高,极其不推荐。...根据内聚的紧密程度,可以将内聚分为以下几种类型: 偶然内聚(Coincidental Cohesion) 模块内部的元素之间没有明显的关联,仅仅是为了完成某种目的而放在一起。...总结 耦合和内聚是衡量软件设计质量的重要指标。理想的设计应当尽量降低模块之间的耦合,同时提高模块内部的内聚。低耦合和高内聚有助于提升系统的可维护性、可扩展性和重用性。 二、题目

    27600

    软考高级:软件测试类型概念和例题

    这两类测试各有不同的子类别,具体可以用以下表格进行解释: 动态测试 类型 描述 示例 白盒测试 又称为结构测试,主要针对软件内部逻辑结构进行测试,需要测试者了解程序的内部结构和工作原理。...对一个排序函数,测试其内部逻辑是否能正确处理不同类型的输入数组。 黑盒测试 又称为功能测试,不考虑程序内部逻辑结构,只根据需求规格说明来测试软件的功能。...静态测试 类型 描述 示例 桌前检查 通过手工检查文档(需求、设计、代码等)来发现错误,不通过执行程序来发现。 在软件开发早期,通过手工检查需求文档,发现需求描述不清的问题。...静态测试和动态测试 B. 白盒测试和黑盒测试 C. 代码审查和代码走查 D. 桌前检查和功能测试 静态测试中,桌前检查主要是检查: A. 程序的运行性能 B. 文档中的错误 C....软件内部结构和逻辑的测试 C. 程序的外部功能 B. 白盒测试和黑盒测试 B. 文档中的错误 B. 发现并修正源代码中的错误 C. 手动检查代码 B. 完全基于需求文档进行 A.

    11500

    软考高级:功能模型、行为模型、数据模型概念和例题

    结构化需求分析通常包括功能模型、行为模型和数据模型三个部分,每个部分针对系统的不同方面进行详细的描述。 功能模型 功能模型主要描述系统应该完成哪些功能,即系统能做什么。...例子:考虑一个图书馆管理系统,功能模型可能包括借书、还书、查询图书、管理用户账户等功能。 行为模型 行为模型描述系统如何响应外部事件,即系统如何工作。...二、AI 出题 结构化需求分析中不包括以下哪个模型? A. 功能模型 B. 行为模型 C. 数据模型 D. 颜色模型 功能模型通过哪种图来描述系统的功能? A. 用例图 B....系统的颜色和设计风格 答案与解析 D. 颜色模型。结构化需求分析关注功能、行为和数据,颜色模型不属于需求分析的范畴。 A. 用例图。功能模型常通过用例图来描述系统的功能。 B. 状态图。...在数据模型中,系统使用的颜色方案不是应该定义的实体,这与数据的结构和关系无关。 B. 系统如何做。行为模型描述的是系统如何响应外部事件,即系统的行为方式。

    42200

    软考高级:电子商务角色和类型概念和例题

    电子商务运用了如互联网等信息技术手段,使得交易双方无需面对面即可完成交易,极大地便利了人们的生活和企业的运营。...其中,电子商务的主要角色包括企业和个人,根据交易双方的不同,电子商务可以分为以下几种模式: 类型 说明 例子 B2B(Business to Business) 企业对企业的电子商务模式,即企业之间进行商品或服务的交易...C2C模式,即消费者之间的电子商务模式,如淘宝和eBay等平台。 答案:B。C2B模式中,消费者向企业提供商品或服务,如设计众包平台。 答案:B。...B2C是企业直接向消费者销售商品的电子商务模式,如京东和亚马逊。 答案:A。淘宝是C2C模式下的代表性平台,允许个人之间进行商品交易。 答案:D。...美团和大众点评是O2O模式的典型例子,提供线上预订和线下服务体验的平台。 答案:B。阿里巴巴批发市场主要面向企业之间的交易,提供批发服务。 答案:C。

    7700

    软考高级:软件过程模型概念和例题

    一、AI 讲解 软件过程模型是指导软件开发和维护的框架,它们提供了一个预定义的工作流程和活动顺序。不同的软件过程模型适用于不同类型和规模的项目。...瀑布模型:是最早的软件开发模型,它将软件开发流程划分为顺序阶段,每个阶段完成后才开始下一个。这种模型适用于需求明确且不太可能发生变化的项目。 螺旋模型:结合了瀑布模型的系统性和原型模型的灵活性。...V模型:也称为验证和验证模型,强调开发过程中的测试。它将测试阶段与相应的开发阶段对应起来,以早期发现和解决问题。...形式化方法模型:通过数学方法来定义、开发和验证软件,适用于对可靠性和安全性要求极高的软件项目。...敏捷开发 题目4:基于构件的开发模型(CBSD)的主要优势是什么? A. 高度的灵活性和适应性 B. 重用现有软件构件加速开发 C. 强调早期测试 D.

    19100

    软考高级:敏捷模型相关概念和例题

    一、AI 讲解 敏捷模型概念 敏捷模型是一种迭代和增量的软件开发方法,强调灵活性和客户参与。它反对传统的“瀑布模型”,敏捷模型鼓励快速反馈循环和适应性规划,使团队能够更快地响应变化。...极限编程(XP):一种更加技术性的方法,强调编程技巧、代码审查和客户反馈。 精益开发(Lean):强调去除浪费,优化资源,提高效率。 二、 AI 出题 敏捷模型鼓励的反馈循环类型是: A....瀑布模型 D. 极限编程(XP) 敏捷开发中,团队成员最需要的是什么? A. 环境和支持 B. 详细的文档 C. 严格的管理 D....业务人员和开发者必须天天一起工作 答案及讲解: B. 短期反馈。敏捷模型强调快速迭代和频繁反馈,以便快速适应变化。 C. 可工作的软件。敏捷方法论强调最重要的是交付可工作的软件。 D. 所有以上。...瀑布模型。瀑布模型是一种传统的、顺序的开发方法,与敏捷模型相对。 A. 环境和支持。敏捷宣言中提到,最高效和有效的方法是给予开发者他们需要的环境和支持,并信任他们完成工作。 C. 完成尽可能多的功能。

    19100

    Mysql数据库--删除和备份、约束类型

    1.删除操作 1.1表的删除操作 delete from 表名 where 条件(可以搭配order by,delete) 会把符合条件的行从这个表里面删除掉 drop tabel-...--删除表操作; drop操作就是直接把这个表删除了,这个表根本就不会存在于这个数据库里面了,但是我们的delete是把表里面的记录删除掉,但是这个表还是存在的; delete table(名字)...--可以进行表的记录删除,但是这个表还是存在的; delete和update都是持久化的操作,会影响到我们的数据库服务器的磁盘里面的数据,因此这个草最一定要谨慎,但是像这个insert之类的这个操作只是临时的...但是之前的那个对于这个表进行查询的时候,这个里面有一个对于这个表数据进行排序,我们的这个desc表示的就是降序排列,两个虽然写法一样,但是这个实际含义不一样,这个降序排列里面的这个desc表示的就是descend这个单词,因此这个提示我们为了避免引起歧义...,这个删除之后我们的儿子表里面就没有参考了; 正确做法是:我们可以先去删除这个儿子表,再去删除这个父亲表,这样才会被允许操作; 下面的这个是一个电商网站的情景,这个里面就有用到我们的这个外键约束,因为我们下单的这个商品的

    10010

    软考高级:统计过程模型(RUP)概念和例题

    一、AI 讲解 统计过程模型(RUP)实际上应该是指“统一过程模型(Rational Unified Process, RUP)”,这是一个用于软件开发的迭代式框架。...RUP 的四个基本阶段: 初始阶段(Inception):定义项目的范围和目标,确定项目的基本结构,包括关键用例和主要风险。...用例驱动:用例是驱动需求、设计、实现和测试的基础。 面向架构:强调定义和维护一个健壯的架构。 风险驱动:早期识别和解决项目中的高风险。...初始阶段是定义项目的范围和目标的阶段。 答案:B。迭代式开发意味着将项目分解为多个小的、可管理的部分。 答案:B。用例是驱动需求、设计、实现和测试的基础。 答案:C。...面向架构的方法旨在定义和维护一个健壮的系统架构。 答案:C。构建阶段主要关注于系统的开发和测试。 答案:C。风险驱动原则强调早期识别和解决项目中的高风险。

    26200
    领券