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

即使deleted_at不为null,Laravel SoftDeletes仍然返回连接中使用的记录吗?

Laravel SoftDeletes是Laravel框架中的一个特性,用于实现软删除功能。当一个模型使用了SoftDeletes trait后,可以通过调用delete()方法将该模型标记为已删除,而不是真正从数据库中删除。软删除的记录在数据库中会被标记为已删除,但仍然可以通过查询获取到这些记录。

即使deleted_at字段不为null,Laravel SoftDeletes仍然返回连接中使用的记录。这是因为SoftDeletes trait在查询数据时会自动过滤掉已删除的记录。在查询模型时,Laravel会自动添加一个whereNull('deleted_at')的条件,以排除已删除的记录。这样,即使软删除的记录在数据库中仍然存在,但在查询时不会返回这些记录。

Laravel SoftDeletes的优势在于可以方便地实现数据的软删除和恢复。通过软删除,可以保留数据的完整性和历史记录,同时避免了真正删除数据可能引发的数据丢失和关联数据的问题。软删除还可以用于实现回收站功能,用户可以将数据标记为已删除,但仍然可以在需要时恢复数据。

Laravel SoftDeletes的应用场景包括但不限于以下情况:

  1. 用户管理系统:当用户注销账号时,可以使用软删除将用户标记为已删除,但仍然保留用户的信息和历史记录。
  2. 文章管理系统:当管理员删除文章时,可以使用软删除将文章标记为已删除,但仍然保留文章的评论和相关数据。
  3. 商品管理系统:当商品下架或删除时,可以使用软删除将商品标记为已删除,但仍然保留订单和交易记录。

对于腾讯云相关产品,推荐使用腾讯云的云服务器(CVM)来部署和运行Laravel应用程序。腾讯云云服务器提供了高性能、可靠稳定的计算资源,可以满足各种规模的应用需求。您可以通过以下链接了解腾讯云云服务器的详细信息:

请注意,本回答中没有提及其他云计算品牌商,如有需要可以进一步咨询。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

所以,软删除的概念,极为重要。 本文我们仍然不厌其烦地讲解软删除的功能。 物理删除 其实就是真实地把数据从数据库条目清除,laravel模型提供了开箱即用的方法。...比如下面这样使用: $event = Event::find(12); $event->delete(); 首先使用primary key查询出需要的条目,返回一个Event对象实例,然后调用 delete...软删除 在许多情况下,你不会真正想要从数据库中删除记录,而是用一种不再在应用程序中显示它们的方式对其进行注释。这就是所谓的软删除。...任何设置deleted_at为日期时间值的记录,都不会包含在任何查询结果中,因此看起来已经被删除了。...这样操作非常有用,因为误删除的数据,随时可以通过设置 deleted_at = null 而恢复到正常的业务流程中,比如删除的用户,删除的订单,等等其他资源。

2.2K00

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

引言 laravel模型中引入了SoftDeletes这个全局作用域用于将数据库的条目 标记为删除,而实际上并不清除数据,这样可以为后续的数据恢复做铺垫。...{ use SoftDeletes; } 如果数据库表中正好是使用 deleted_at 标记删除日期时间,那么无需手动指定该字段为软删除字段了。...使用了软删除功能后,会在模型的查询方法上,默认追加 where deleted_at is null 那么如果使用了全量查询后,如何判断一个记录是否是已经软删除的呢?laravel提供了这些功能。...方法,则是删除的模型记录。...写在最后 本文通过对laravel模型中软删除的源码分析, 为大家展示了引入软删除功能,并自定义软删除标记字段的方法。通过模型提供的方法,进而判断记录是否已软删除。

1.5K30
  • laravel 模型Eloquent ORM 添加编辑删除

    create 方法的返回值就是当前插入到数据库中的内容up可以通过返回值判断成功或者失败而实际开发中up经常需要返回新增数据的id那直接访问返回值的 id 属性即可。...自动都变成了插入或者修改的时间了,这就是使用模型的好处一大好处 删除 但是最后的这个 deleted_at 是空的,这个字段应该怎么用呢?...softDeletes 即可,模型默认是没有开启软删除功能的开启也很简单就是使用SoftDeletes Laravel 的 数据库迁移 有创建这个字段的方法 现在,当你在模型实例上使用 delete 方法, 当前日期时间会写入 deleted_at 字段。...数据并没有真正被删除只是 deleted_at 不是 null 而是删除的时间了 让我们用代码去查询一下访问一下之前的 index 方法 ?

    1.7K21

    laravel 学习之路 数据库操作 Migrations

    Laravel 的 Schema 门面 提供数据库无关的支持,用于在所有 Laravel 支持的数据库系统中创建和操作表 创建迁移 使用 make:migration Artisan命令来创建迁移 php...在这两种方法中,你可以使用 Laravel 的结构生成器以表达式方式创建和修改表。...$table->softDeletes(); 这个方法就是为表增加一个 deleted_at ,laravel 会在删除数据的时候记录操作日期,具体到功能比如 回收站 的功能了,我们可能会删除某些数据,...但是我们还希望能恢复删除的数据,当某条数据的 deleted_at 为 null 的时候表示正常,当有日期的时候就表示这条数据是在这个日期被删掉了。...timestamp ,其他的字段都多了个 NOT NULL ,这个我们并没有在迁移中指定,这里就需要解释下了,这个 NOT NULL 是 laravel 为我们默认添加的,那如果确实有字段想让它允许为

    2.3K20

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

    实现原理 Eloquent 模型类为我们提供了「软删除」功能的支持。这就意味着,在 Laravel 中,我们不需要编写任何额外代码就可以实现对数据库记录的「软删除」。...其底层实现原理是在支持软删除的数据表中添加一个 deleted_at 字段,这可以通过数据库迁移来实现。...该字段默认值为 NULL,表示没有被软删除。如果要在模型类中支持软删除,需要在对应模型类(在本例中是 Post 模型)中添加支持软删除的 Trait: 的 deleted_at 字段,但何必费这个劲呢,除非你是从其它系统迁移过来的,原来的表结构已经存在了,这时候可以通过再模型类中设置静态属性 DELETED_AT 来自定义软删除字段...如果想要在查询结果中出现软删除记录,可以通过在查询的时候调用 withTrashed 方法实现: $post = Post::withTrashed()->find(32); 返回结果和正常查询结果一样

    2.5K10

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

    代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。第二步,调用模型对象的delete方法。...所以引入了软删除的概念,就是在表内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...$table->softDeletes();}); 那么迁移成功后,生成的contacts表内会添加deleted_at字段。...然后在模型中,引入软删除的功能,将其进行全局生效的使用。...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。

    1.4K30

    最为常用的Laravel操作(1)-Eloquent模型

    关闭时间戳记录 public $timestamps = false; 获取模型数据 // Eloquent 的 all 方法返回模型表的所有结果 $flights = App\Flight::all(...$flight = App\Flight::where('active', 1)->first(); // 通过传递主键数组来调用 find 方法, 这将会返回匹配记录集合 $flights = App...null $user->account()->dissociate(); $user->save(); 附加 / 分离多对多关联模型 $user = App\User::find(1); // 在连接模型的中间表中插入记录...]); // 从中间表中移除相应的记录: 指定用户移除某个角色 $user->roles()->detach($roleId); // 从中间表中移除相应的记录: 指定用户移除所有角色 $user->...例如, 你可能想要使用 Laravel 加密器对存储在数据库中的数据进行加密, 并且在 Eloquent 模型中访问时自动进行解密.

    35200

    Laravel Eloquent 模型关联关系(下)

    从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程中如果想优化性能...,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询,而 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...所以不管模型实例有多少个,关联结果只会查询一次,加上模型本身查询总共是两次查询,在列表查询时,大大减少了对数据库的连接查询次数,因而有更好的性能表现,推荐使用。...`deleted_at` is null order by `created_at` desc 懒惰渴求式加载 有时候,你可能觉得一次性加载所有关联数据有点浪费,对于特定条件下才使用的数据我们可以通过动态条件判断进行渴求式加载或者延迟加载...author 属性时,就会返回如下默认的空对象了: 该特性其实应用了设计模式中的空对象模式,好处是在代码里可以为不同情况编写一致性代码。

    19.6K30

    Laravel 模型操作中一次奇妙踩坑经历

    最近被 Laravel 模型中的一些小问题折腾的死去活来的,明明看着很清晰很明了的代码,却偏偏不能实现功能,现在带大家来切身经历一下这次奇妙的踩坑经历,代码看似很多,实则不多,大家别急着跑,哈哈。...返回的结果是修改了的.... 这就尴尬了,难道是对象集合中的非对象属性不能这样赋值?也不对呀,思来想去决定对对象本身做一个探索,直接在 map 中打印 $userTask : ?...还记得我们刚才测试打印时候的 toArray 吗,就是他把对象集合转变成了一个数组,我们来看一下: ?...大公告成,可以说很优雅,哈哈,大家可能会问,你这直接返回了没有调用 toArray 啊,数据是怎么合并的怎么转换的?...特别鸣谢: zIym 同学[1] (咱俩一起跨的坑,哈哈) 结束语 其实吧最初我也没有想这么多,想了很多其它的解决办法,但是都是治根不治本,到头来发现自己对 Laravel 模型的工作原理还是不熟悉,只存在简单的应用上面

    1.6K30

    3分钟短文:Laravel Carbon自定义日期时间格式

    引言 laravel引用了强大的Carbon日期时间处理库用于日期时间的操作, 并且在数据库的格式化中使用该库。本文就说一说程序中如何方便地使用 Carbon自定义格式。...', 'deleted_at' => 'datetime:Y-m-d h:i:s' ]; 那么读写的数据都会使用Carbon代用该格式化字符串,对数据进行统一格式。...或者在laravel5中使用 $dates 属性,功效与上面的方式相同: protected $dates = ['created_at', 'updated_at'] 读取的时候,该字段都会返回一个null...接着使用Carbon对象的 format 方法,返回自定义的格式就可以了。...在模板中打印默认格式的日期时间字符串,可以这样使用: {{$user->created_at->toFormattedDateString()}} 写在最后 本文介绍了laravel模型中的 $casts

    3.6K20

    Laravel5+mycat 报错 “Packets out of order”

    背景 近期对负责项目,配置了一套 主从复制的 MySQL 集群 使用了中间件 mycat 但测试发现,替换了原来的数据连接后,会出现 Packets out of order 的报错 同时注意到,...有的框架代码中竟然也会失效,比如 controller 类中,获取 $request->all() 竟然变空了 分析、排查 首先,切换 mycat 后,程序报错的一段源码如下: [2024-07-04...`deleted_at` is null order by `id` desc) at D:\\phpstudy_pro\\WWW\\projzqb1b\\vendor\\laravel\\framework...max_allowed_packet 参数 但是,发现不应该是这个问题,毕竟不使用 mycat 时不会出现问题 继续查找发现,这个问题的原因很可能是数据库配置参数的 【预处理】问题 设置 database.php...中的 options 的预处理可以解决报错 (但是查询出来的数据全部转为了字符串) 因为上述的变动,代码中的判断,可能会出现问题,尤其是一些 数字类型的 === 比对 希望得到的结果:同时满足

    17510

    手把手,带你从零封装Gin框架(四):数据库初始化(GORM)

    前言 许多框架都会引入 ORM 模型来表示模型类和数据库表的映射关系,这一篇将使用 gorm[1] 作为 ORM 库,它遵循了 ActiveRecord(模型与数据库表一一对应) 模式,并且提供了强大的功能...数据库名称 username: root # 用户名 password: root # 密码 charset: utf8mb4 # 编码格式 max_idle_conns: 10 # 空闲连接池中连接的最大数量...log_filename: sql.log # 日志文件名称 自定义 Logger(使用文件记录日志) gorm 有一个默认的 logger[3] ,由于日志内容是输出到控制台的,我们需要自定义一个写入器...,将默认logger.Writer 接口的实现切换为自定义的写入器,上一篇引入了 lumberjack ,将继续使用它。...:"password" gorm:"not null;default:'';comment:用户密码"` Timestamps SoftDeletes } 在 bootstrap/db.go

    2.1K30

    Gorm实战,轻松掌握数据库增删改查技巧!

    ) // 返回插入记录的条数 1.2 用指定的字段创建记录 创建记录并更新给出的字段。...`deleted_at` IS NULL fmt.Println(result.RowsAffected) // 返回找到的记录计数,等于“len(student)” fmt.Println(result.Error...`deleted_at` IS NULL 若要在查询条件中包含零值,可以使用map,该映射将包含所有键值作为查询条件,例如: // 如果想要在查询中包含0的字段,可以使用map来做 db.Where...`deleted_at` IS NULL // 可以看到Name字段不会更新,这是合理的,因为如果零值字段也更新,Student表中好多数据都会被更新为空 6.1 使用sql.NullString更新...`deleted_at` IS NULL 个人感觉还是用指针比较好,在平时Go开发中,遇事不决就用指针,没毛病.

    3.4K20

    Laravel 软删除存在的问题

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

    2.3K20

    在 Laravel Eloquent 模型类中使用作用域进行查询

    只需要实现 apply 方法即可,在该方法中,在查询构建器上应用过滤器方法并将其返回。...,不同场景需要不同的预置过滤器,这个时候就不能使用「全局作用域」了,要改用「局部作用域」,在不同场景应用不同的局部作用域来完成查询功能。...`deleted_at` is null limit 1 说明局部作用域已经生效了,通过这个例子你可能不觉得「局部作用域」的优势,我们来看列表页的查询。...`deleted_at` is null order by `views` desc 如果我们要把这个 SQL 语句转化为查询构建器的话,显然需要编写多个查询方法,而且如果要在多个地方进行这种查询...`deleted_at` is null 动态作用域的调用和移除方式和局部作用域一样。 本系列教程首发在Laravel学院(laravelacademy.org)

    2.5K20

    面试题(三)

    返回值类型声明:增加了对返回类型声明的支持。类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。...NULL 合并运算符:由于日常使用中存在大量同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。...使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?...选取最适用的字段属性,应该尽量把字段设置为NOT NULL 使用连接(JOIN)来代替子查询(Sub-Queries) 使用联合(UNION)来代替手动创建的临时表 尽量少使用 LIKE 关键字和通配符...如laravel中的 _token 代码注入:代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。

    2.4K10

    面试题(四)

    返回值类型声明:增加了对返回类型声明的支持。类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。...NULL 合并运算符:由于日常使用中存在大量同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。...使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?...选取最适用的字段属性,应该尽量把字段设置为NOT NULL 使用连接(JOIN)来代替子查询(Sub-Queries) 使用联合(UNION)来代替手动创建的临时表 尽量少使用 LIKE 关键字和通配符...如laravel中的 _token 代码注入:代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。

    2.3K20

    Laravel迁移数据库!

    我们本期要使用laravel自带的迁移功能,在不操作任何数据库的条件下,完成基础的数据构建。 迁移文件 本文假设你已经正确地配置了环境变量文件,并且通过数据库配置项,系统已经可以正常连接到数据库了。...比如主键默认的自增 id,还有用于记录创建时间 created_at 和 更新时间 updated_at,一个 timestamps() 方法就包含了, 只不过默认使用的是不直观的整型时间戳,如果要使用...('deleted_at')->nullable()->change(); 对于插入新的字段,还可以指定位于哪个字段之前或者之后: $table->string('email')->nullable()...->after('last_name'); 仅仅修改字段名,只需调用对应方法: $table->renameColumn('promoted', 'is_promoted'); 或者在回滚方法中对某些新增的字段进行删除...上面给的这些个方法,足够应对很多很多场景了。 写在最后 本文介绍了laravel中使用迁移功能操作数据库的创建,修改,移除字段,删除表等,把开发者从手动维护数据库的状态中解脱出来。

    1.1K00

    Laravel迁移数据库!

    我们本期要使用laravel自带的迁移功能,在不操作任何数据库的条件下,完成基础的数据构建。 迁移文件 本文假设你已经正确地配置了环境变量文件,并且通过数据库配置项,系统已经可以正常连接到数据库了。...比如主键默认的自增 id,还有用于记录创建时间 created_at 和 更新时间 updated_at,一个 timestamps() 方法就包含了, 只不过默认使用的是不直观的整型时间戳,如果要使用...('deleted_at')->nullable()->change(); 对于插入新的字段,还可以指定位于哪个字段之前或者之后: $table->string('email')->nullable()...->after('last_name'); 仅仅修改字段名,只需调用对应方法: $table->renameColumn('promoted', 'is_promoted'); 或者在回滚方法中对某些新增的字段进行删除...上面给的这些个方法,足够应对很多很多场景了。 写在最后 本文介绍了laravel中使用迁移功能操作数据库的创建,修改,移除字段,删除表等,把开发者从手动维护数据库的状态中解脱出来。

    98610
    领券