3分钟短文:Laravel模型创建数据条目的2个语法糖

发布时间:2021-07-27 16:19:00 阅读:959次
[https://learnku.com/articles/50399](http://) 引言 经过之前章节对于路由,控制器等知识做了很多的储备,接着我们开始与数据库交互,摆脱繁复且难以维护的 SQL 操作,laravel 提供了 MVC 的 M 模型功能。 本期我们开始讲模型中,如何插入新条目,或者更新既有条目。 代码时间 我们在构建一个 hello world 页面的时候,已经介绍了如何使用 laravel 的命令行脚手架创建新的模型文件,以及通过迁移功能创建数据库表。这样就把数据操作衔接起来了。 一般地,使用面向对象的方式创建一条新的数据,可以这样来写: $event = new Event; $event->name = 'Coffee and Laravel'; $event->venue = 'The Mocha Factory'; $event->save(); 大家注意,在对象创建之后,我们直接操作对象属性,为其赋值,最后调用 save 方法,就完成了数据新建的所有动作。 我们在表中还有 id 字段,created_at 字段,updated_at 字段,并没有显式赋值。但是你打开数据库表查看结果的时候,发现那些值也成功的写入了。 原有如下: id 字段是 auto_increment 约束,自动递增; created_at /updated_at 字段,在 Event 模型内使用了 $timestamp = true。这样 laravel 在处理模型数据的时候,会默认更新此二字段。 然而,对于写入数据库的那些数据,并不是所有字段都会允许写入的。在模型内我们可以手动指定哪些字段可以写,哪些字段不可以写。只需添加如下内容: protected $fillable = ['name','venue']; 这样就进允许指定的两个字段的值写入,其他都会舍弃。 比如对于 User 模型,是控制用户权限资源的,所以非常重要。假如有一个字段 `is_admin` 用于指定是否 ” 超级管理员 “,如果在程序内不小心使用数组或者其他方式对其进行了写入,将会造成比较大的麻烦。 我们可以在模型内将其 “`保护`” 起来: class User extends Model { protected `$guarded` = ['is_admin']; } 这样使用 User 模型写数据库的时候,就杜绝了该字段的写入。 新建 or 更新 接着介绍 laravel 模型的几个语法糖。一个常规的场景,比如在写入数据时,先判断数据库表内是否有该条记录,如果没有就创建,如何有则返回。 模型有一个语法糖方法 firstOrCreate,举一个例子: $event = Event::`firstOrCreate`(['name' => 'Coffee and Laravel']); 上面的代码相当于下面的操作: $event = Event::where('name', 'Coffee and Laravel')->first(); if (is_null($event)) { $event = Event::create(['name' => 'Coffee and Laravel']); } 返回的总是一个 Event 对象,所以如果想要接着操作其他属性,那就接着写好了: $event->venue = 'Starclucks'; $event->save(); 这就是第二条 SQL 操作了,都是即时生效的。 firstOrCreate 方法还接收第二个参数,用于指定第一个参数查询语句不成立时,创建数据条目时使用。代码如下: $event = Event::firstOrCreate(['name' => 'Coffee and Laravel'], ['venue' => 'Starclucks', 'city' => 'Dublin']); 如果 name 字段已存在,就返回第一条数据;如果不存在,就是用第二个数组写入。 laravel 还有一个方法 `firstOrNew 用于不立即写入数据库,直到手动写入`: $event = Event::`firstOrNew`(['name' => 'Coffee and Laravel']); $event->venue = 'Starclucks'; $event->save(); 写在最后 本文通过一个简单的数据操作介绍了如何保护字段,手动指定允许字段。以及两个语法糖的使用细节。 Happy coding

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:3分钟短文:Laravel模型创建数据条目的2个语法糖 出自老鄢博客 | 欢迎分享