您的位置 首页 php

3分钟短文:Laravel模型写操作很简单,大多数人容易用错

引言

前几期我们通过laravel模型的读操作方法,实现了很多花样繁多的条件筛选查询, 可以说足以应对大多数的场景。

本期说说写操作的那些事,包括创建,修改,这些直接操作数据库数据的操作方法。 虽然简单,但是很多新手容易上来就犯错。

代码时间

先说说创建条目,数据库内原本不存在,直接新建一个条目的操作。 我们仍然使用contacts表作为示例,下面是使用模型Contact新建一条数据:

 $contact = new Contact;
$contact->name = 'Tom Hanks';
$contact->email = 'tom@hanks.com';
$contact->save();  

创建一个空对象,然后对属性赋值,最后调用save方法将输入存档。一气呵成。

如果属性字段超级多,不是这么两三个,要手动一个一个赋值,想想都觉得恐怖。所以, 模型也提供了快捷的方法,接收一个数组,按照键值和属性的对应关系,一次写入:

 $contact = new Contact([
    'name' => 'Tom Hanks',
    'email' => 'tom@hanks.com'
]);
$contact->save();  

我们只是在实例化对象的时候,传入数组,用于调用 __constract() 方法。这样省却了很多代码空间。

但是,save方法太宽泛了,在创建数据时,用于写入数据库;在更新数据时,同样用于写操作。有点泛泛而谈的意思。 框架贴心地准备了专门用于创建条目的 create 方法。看代码:

 $contact = Contact::create([
    'name' => 'Tom Hanks',
    'email' => 'tom@hanks.com'
]);  

是不是代码上直观多了?

创建条目本身的逻辑没有太过复杂,我们接着看看更新操作,因为需要额外查询一次数据库,将存在的条目取出来, 然后对其数据重新操作,再更新到数据库,所以要绕多一些弯弯。

例如,将id=580的contact条目找出来,并更新其email地址,用代码实现是这样的:

 $contact = Contact::find(580);
$contact->email = 'john@deway.com';
$contact->save();  

我们使用find根据id查找条目,并返回一个Contact模型对象。直接操作更新该对象的属性,最后调用save存档。 这样就完成了数据库更新。

更直观地,可以使用框架的update方法,用于更新数据。传入的数组必须是数据库模型定义好的对应字段名。 比如下面的例子,查找数据库内所有超过一年的contact,并标记状态:

 Contact::where('created_at', '<', Carbon::now()->subYear())->update(['status' => 'inactive']);  

如果你不喜欢这样的操作,可以拆分为两步实现,类似下面这样:

 $contact = Contact::find(567);
$contact->update(['status' => 'inactive']);  

一条一条地更新数据是不现实的,一般情况下,都需要批量更新。举一个简单的例子, 从请求拿到数据,批量塞入数据库:

 public function update(Contact $contact, Request $request)
{
    $contact->update($request->all());
}  

这样用的前提是你必须手动再模型中指定可以填充的字段名:

 protected $fillable = ['name', 'email'];  

其他字段会自动过滤掉不会使用。或者使用相反的方式,字段太多,不能一一列举, 就使用保护字段,指定哪些不可填充:

 protected $guarded = ['id', 'created_at', 'updated_at', 'owner_id'];  

如果你想要做更保险的字段指定,则可以使用request对象的only方法,指定哪些数据要使用, 其他的则直接废弃:

 Contact::create($request->only('name', 'email'));  

有了这些基础的操作,终于可以说说更懒散的语法糖结构了。比如判断一个条目是否存在,如果存在则返回数据, 如果不存在则创建。

 $contact = Contact::firstOrCreate(['email' => 'walt@white.com']);  

结果返回一个 Contact 模型。会根据 email 字段的值查找条目,如果没有则创建。

写在最后

本文主要讲解了通过模型创建数据条目,或更新条目。其中最关键的还是 模型字段的属性保护,指定可以写入的数据,并使用过滤器进行筛选。 一般地,我们会使用验证器对数据做一个验证,通过后再视业务逻辑更新数据库。

Happy coding 🙂

文章来源:智云一二三科技

文章标题:3分钟短文:Laravel模型写操作很简单,大多数人容易用错

文章地址:https://www.zhihuclub.com/79689.shtml

关于作者: 智云科技

热门文章

网站地图