你可能不知道的 Laravel Eloquent 操作
从它的眼睛,我什么都没看到
Laravel Eloquent 提供了太多现成的方法,但是官方文档上有些东西是看不到的,这就需要日常开发的积累,源码的查看,以及相互之间的分享。
今天主要分享一下我知道的可能你不知道的而且文档没有的 Eloquent
中的几个操作。
push
大概率会碰到的。假设现在用户模型 User
和 微信 Wechat
是一对一关系,然后进行以下操作:
$user = User::where('name', 'wuqinqiang')->first();
$user->age = 18;
$user->wechat->nickName = "Remember";
$user->save()
那么此时,会保存用户信息,但是并不会保存对应 Wechat
的关联信息,想让它一起保存咋么办?也很简单。把 save 换成 push 即可。
$user->push();
我不想要模型事件
我们都知道,在使用 Eloquent
模型的时候,创建或者更新模型这些操作的时候,是有几个阶段的事件的,有时候可能因为业务上的需要,可能会监听某个事件执行某些操作。比如下面这段监听对应事件执行对应操作的代码:
public static function boot()
{
parent::boot();
static::creating(function ($model) {
//业务逻辑
});
}
那要是不想在操作时触发任何事件则么办?你可以执行一个回调函数而无需触发任何事件:
$user = User::withoutEvents(function () {
return //保存或者更新代码
});
模型是否被动过手脚
想知道从数据库查询获取出来的模型是否被动过手脚(修改)?也有办法。可以使用 isDirty
$ user = User :: where('name','wuqinqiang')->first();
$ user-> isDirty(); // 还没被动过 返回 false
$ user-> name ='curry';
$ user-> isDirty(); //模型被动过了 返回true
$ user-> isDirty('email'); // 可以传入参数 验证某个参数是否被动过,这个我还没碰过 当然 false
$ user-> isDirty('name'); // true
如果你还想具体了解到哪些是被动过了,可以使用:
$user->getDirty(); 你将得到一个数组 ["name" => "curry"]
我想看原始数据
既然上面提到是否被动过手脚,那动过手脚之后我又想看看之前的模样(ps:人就是这样麻烦)。强大的 Laravel Eloquent 也可以办到:
$ user = User :: where('name','wuqinqiang')->first();
$user->name = 'curry';
$user->getOriginal(); // 返回数组 "name" => "wuqinqiang"
$user->getOriginal('name'); //指定要看哪个属性的原值 "wuqinqiang"
顺便分享一下你们知道的我不知道的文档上没有的骚操作??
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: