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

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

每次这么做得崩溃掉,到时候我们的控制器类里面可能会遍布这种设置代码,Laravel 号称的优雅就是打脸了。所以这个时候,批量赋值就粉墨登场了,批量赋值就是为我们解决这个问题的。...实现原理 Eloquent 模型类为我们提供了「软删除」功能的支持。这就意味着,在 Laravel 中,我们不需要编写任何额外代码就可以实现对数据库记录的「软删除」。...这样我们在模型类上做所有常规查询操作的时候就会过滤掉被软删除的记录(这些常规查询在上一篇教程中已经给出)。...如果想要在查询结果中出现软删除记录,可以通过在查询的时候调用 withTrashed 方法实现: $post = Post::withTrashed()->find(32); 返回结果和正常查询结果一样...在某些场景下,你可能只需要获取被软删除的记录,这可以通过 onlyTrashed 方法来实现: $post = Post::onlyTrashed()->where('views', 0)->get()

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

    跟我一起学Laravel-EloquentORM基础部分

    使用Eloquent [‘eləkwənt] 时,数据库查询构造器的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分。...) ->take(10) ->get(); 可以看到,查询构造器的方法对模型类也是可以使用的 在eloquent ORM中,get和all方法查询出多个结果集,它们的返回值是一个Illuminate...,返回删除的行数 $deletedRows = App\Flight::where('active', 0)->delete(); 软删除 软删除是在表中增加deleted_at字段,当删除记录的时候不会真实删除记录...方法 if ($flight->trashed()) { // } 查询软删除的模型 包含软删除的模型 如果模型被软删除了,普通查询是不会查询到该结果的,可以使用withTrashed方法强制返回软删除的结果...', 1) ->get(); 还原软删除的模型 查询到软删除的模型实例之后,调用restore方法还原 $flight->restore(); 也可以在查询中使用 App\Flight::withTrashed

    85220

    Laravel 9个不经常用的小技巧

    更新父表的timestamps 如果你想在更新关联表的同时,更新父表的timestamps,你只需要在关联表的model中添加touches属性。 比如我们有Post和Comment两个关联模型 时使用withDefault() 在调用关联时,如果另一个模型不存在,系统会抛出一个致命错误,例如 $comment->post->title,那么我们就需要使用withDefault() ......两层循环中使用$loop 在blade的foreach中,如果你想获取外层循环的变量 @foreach ($users as $user) @foreach ($user->posts as $post...通过关联查询记录 在hasMany关联关系中,你可以查询出关联记录必须大于5的记录 $posts = Post::has('comment', '>', 5)->get(); 8....软删除 查看包含软删除的记录 $posts = Post::withTrashed()->get(); 查看仅被软删除的记录 $posts = Post::onlyTrashed()->get(); 恢复软删除的模型

    75320

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

    引言 我们不止一次在系列文章中讲到模型的“软删除”功能,因为现实场景中为了保证数据可追溯,我们几乎不会对数据库进行物理删除。删除数据有可能会造成数据一致性的破坏,进而导致业务逻辑无法跑通。...所以,软删除的概念,极为重要。 本文我们仍然不厌其烦地讲解软删除的功能。 物理删除 其实就是真实地把数据从数据库条目清除,laravel模型提供了开箱即用的方法。...软删除 在许多情况下,你不会真正想要从数据库中删除记录,而是用一种不再在应用程序中显示它们的方式对其进行注释。这就是所谓的软删除。...Laravel本身支持软删除,只需要进行少量的配置更改,以确保在执行delete或destroy时,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...如果你在代码内要坚持查询全量数据,也包含软删除了的数据,那么代码这样写: $events = Event::withTrashed()->get(); 写在最后 本文我们有重温了laravel的模型软删除功能

    2.2K00

    通过 Laravel 查询构建器实现简单的增删改查操作

    通过前面几篇教程的预热,我们已经连接上数据库,创建好了数据表,填充好了数据,接下来,就是在 Laravel 应用中实现对数据库的增删改查了。...DB 门面提供的方法执行原生的 SQL 语句,DB 门面既可以用于构建查询构建器方法链,也可以用于原生语句的执行。...使用查询构建器进行增删改查 接下来,我们开始介绍 Laravel 数据库功能的核心组件 —— 查询构建器(说是核心,是因为 Eloquent 模型的底层也是基于这个查询构建器),日常开发中,我们与数据库的交互基本都是直接或间接通过它来完成的...查询构建器也是基于 DB 门面的,只不过需要调用其提供的 table 方法构建一个基于指定数据表的查询构建器。...,无需手动设置参数绑定来规避 SQL 注入攻击,因为 Laravel 底层会帮助我们自动实现参数绑定,所以推荐使用查询构建器进行数据库操作。

    4.2K20

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

    我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...::destroy(1); 该方法可以可以用于批量删除传入的指定ID数组的条目: Contact::destroy([1, 5, 7]); 当然了,delete方法只是链式调用的一个方法,我们通过查询构造器过滤后的数据集...所以引入了软删除的概念,就是在表内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...然后在模型中,引入软删除的功能,将其进行全局生效的使用。...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。

    1.4K30

    更新依赖遇到的一些问题以及解决方法

    monday-shop 商城 这里有一个删除和上架(使用软删除)功能 更新了版本,使用的是DropdownActions替代了以前的Actions 这个地方遇见了两个问题...控制器中的确有destroy方法并且的确执行了强制删除, 没能删除成功的原因,肯定是因为未进入这个方法 monday-shop 商城 尝试执行了一次删除,通过查看网络请求,并非请求到指定的控制器...monday-shop 商城 所以解决方法也很简单,我们在实际的Action类重写这个方法 强制查询出软删除的数据即可, 到此便可正常上下架商品 monday-shop 商城...我们查看Delete Action 类, 发现这个类只是简单的删除, 并不是强制删除 monday-shop 商城 所以, 我们在使用的地方移除掉这个默认删除操作,增加一个强制删除...monday-shop 商城 强制删除操作做的事情也很简单,只要使用Laravel自带的强制删除方法即可 monday-shop 商城 至此, 删除便可完成

    20110

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

    引言 laravel模型中引入了SoftDeletes这个全局作用域用于将数据库的条目 标记为删除,而实际上并不清除数据,这样可以为后续的数据恢复做铺垫。...= 'my_deleted_at'; } 如果要使用框架的格式化方法对该字段进行标准操作: protected $dates = ['my_deleted_at']; 检查条目 上一节介绍了默认的软删除使用方法...,和自定义软删除字段的方法。...使用了软删除功能后,会在模型的查询方法上,默认追加 where deleted_at is null 那么如果使用了全量查询后,如何判断一个记录是否是已经软删除的呢?laravel提供了这些功能。...写在最后 本文通过对laravel模型中软删除的源码分析, 为大家展示了引入软删除功能,并自定义软删除标记字段的方法。通过模型提供的方法,进而判断记录是否已软删除。

    1.5K30

    3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用域你没用过

    引言 使用框架就是为了方便把注意力集中在逻辑上,而不用关心与数据库操作的方方面面。...今天说一说,复杂的超多的WHERE子句,怎么写起来较为优雅。 学习时间 比如对于业务逻辑中,User模型在筛选查询的时候有非常多的限制条件,类似下面这样的: ?...Laravel 的软删除功能就是利用此特性从数据库中获取 “未删除”的模型。 你可以编写你自己的全局作用域,很简单、方便的为每个模型查询都加上约束条件。看官方给出的示例: ?...那么使用 User::all() 方法构造查询时,生成的sql语句中会追加 AgeScope 设置的查询约束条件: select * from `users` where `age` > 200 实现本地作用域...就是在对应的 Eloquent 模型方法前添加 scope 前缀,在模型中构造如下的作用域方法: ?

    2.8K10

    通过 Laravel Eloquent 模型实现简单增删改查操作

    实际上,Eloquent 模型类底层的查询也是基于查询构建器来实现的,你可以在模型类上调用所有查询构建器的 Where 查询方法,同样是以流接口的模式构建方法链调用即可。...因为是查询构建器,所以我们还可以在模型查询操作中对查询结果进行排序和分页: $posts = Post::where('views', '>', 0)->orderBy('id', 'desc')->offset...获取单条记录 当然,你也可以通过查询构建器的方式在模型类查询中获取单条记录: $user = User::where('name', '学院君')->first(); 返回的结果是一个模型类实例: ?...如果你想要在单条记录返回结果为空时返回 404 响应(在控制器方法中可能需要用到类似操作),可以通过 firstOrFail 或者 findOrFail 方法在找不到对应记录时抛出 404 异常,从而简化代码编写...,就等同于掌握了 Laravel 中的所有数据库查询操作。

    8K20

    laravel与thinkphp之间的区别与优缺点

    3、Laravel框架提供了大量的闭包 作为菜鸟的我目前只使用了use方法,即如何在函数内部使用外层变量。...6、Laravel里内置了大量的方法供开发者使用 在实际应用中更接近于”让对象完成一切”的开发思想,比如在后台表单验证的时候,Laravel内置了大量的验证方法。...7、加密方式 在TP框架中,我们对用户名密码进行加密时使用md5();的方式进行加密。...无须担心,从github中pull下项目后在数据表里直接修改,只需要用: php artisan migrate:refresh 9、ORM 在介绍建表时已经使用了创建模型的命令: php artisan...本人在实际使用中也实实在在的感受到了通过创造模型对数据表操作带来的便利,譬如:批量赋值,跨表查询,删除模型和软删除,模型关联,当然这些在TP框架中也可以利用模型实现。

    5.7K20

    Laravel和Thinkphp有什么区别,哪个框架好用

    3、Laravel框架提供了大量的闭包 作为菜鸟的我目前只使用了use方法,即如何在函数内部使用外层变量。...6、Laravel里内置了大量的方法供开发者使用 在实际应用中更接近于”让对象完成一切”的开发思想,比如在后台表单验证的时候,Laravel内置了大量的验证方法。...7、加密方式 在TP框架中,我们对用户名密码进行加密时使用md5();的方式进行加密。...无须担心,从github中pull下项目后在数据表里直接修改,只需要用: php artisan migrate:refresh 9、ORM 在介绍建表时已经使用了创建模型的命令: php artisan...本人在实际使用中也实实在在的感受到了通过创造模型对数据表操作带来的便利,譬如:批量赋值,跨表查询,删除模型和软删除,模型关联,当然这些在TP框架中也可以利用模型实现。

    6.1K20

    Laravel 软删除存在的问题

    ,如果类常量DELETED_AT为null,则不执行相应的软删除操作 4、join操作,只会在对当前模型添加软删除查询条件 5、在belonsToMany关联关系中,如果关联表,中间表,被关联表都有软删除字段...,查询关联关系,不会对中间表应用软删除条件 belonsToMany中的中间表是传入的表名参数,天然没办法获取中间表是否需要应用软删除。...被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、在hasManyThrough关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。...如果要修改,也可以,通过scope的方式附加软删除条件,这样就能保证软删除的查询条件是在真正查询的时候才附加上去。...从上面可以看出,Laravel的软删除,在关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。

    2.3K20

    cell-blog 开发记录

    中 disks 处添加以下配置后执行php artisan storage:link来创建软链接(windows 和 linux 的软链接不一样不能直接复制!)...中添加白名单跳过验证,或者手动添加 csrf 验证器: 修改 image-dialog.js 的var dialogContent 参考 1 2 3 4 5 6 7 8 9 10 if...\CommonMark\Extension\TaskList\TaskListExtension::class, ], Eloquent 模型事件 Eloquent 模型可以触发事件,允许你在模型生命周期中的多个时间点调用如下这些方法...事件允许你在一个指定模型类每次保存或更新的时候执行代码。 retrieved 事件会在从数据库中获取已存在模型时触发。当一个新模型被首次保存的时候,creating 和 created 事件会被触发。...如果一个模型已经在数据库中存在并调用 save 方法,updating/updated 事件会被触发,无论是创建还是更新,saving/saved 事件都会被触发。

    89340

    记几个常见的Laravel报错

    报错:「Can’t swap PDO instance while within transaction」 通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的: 在执行查询语句出错的时候,系统会通过 tryAgainIfCausedByLostConnection 方法判断问题是不是因为丢失连接导致的,如果是,那么系统会通过 reconnect 方法重新连接...一个相对 dirty 的处理方法是在查询前执行一下 DB::reconnect() 方法重新连接一下数据库。...于是乎同一个消息可能会被多个消费者处理,第一个处理完的消费者可以正常的删除消息,而其余的消费者在删除消息的时候就会报无法删除的错误。...> 也就是说,通过 Laravel 的 onWriteConnection 方法把查询固定在主服务器上,不过实际上无效。

    1.2K30

    Laravel 6.7.0 版本发布,支持不加载关联关系

    getQualifiedCreatedAtColumn(); // 例如 users.created_at $model->getQualifiedUpdatedAtColumn(); // 例如 users.updated_at 异常处理器中可以使用新的...现在会抛出错误来取代之前的静默失败,此更新无需调整任何上层业务代码: 此外,一个比较重要的更新是 Eloquent 模型类现在还新增了 withoutRelations() 方法,用来支持在队列任务中不加载关联关系...我们可以在队列任务的构造函数中调用该方法: /** * Create a new job instance....资源集合现在可以通过调用 preserveQueryParameters() 方法在 API 资源分页时保留查询字符串: return MyResourceCollection::make($repository...) 新增 ResourceCollection::preserveQueryParameters() 方法以便在 API 资源分页时保留查询字符串(#30745, e92a708) 修复问题 修复基于字符串的数据库验证规则中的显式模型问题

    1.6K20
    领券