firstOrCreate方法是laravel框架中操作数据表很常用的一个方法,在某些场景下他将变得很有用可以极大的简化代码
有这样一个场景:我希望去数据表中按条件查询一条记录,如果这条记录存在就返回这条记录,然后更新记录中的某个字段,
如果记录不存在我需要创建一条新的记录?
从源码中我们可以看出firstOrCreate这个方法接收两个数组作为参数,第一个参数是查询的条件,第二个参数是要新增的数据,
也是就是说firstOrCreate这个方法会先尝试将$attribures作为查询条件,去数据表中查询一条记录,如果在数据表中
没有获取到记录则将第二个参数$values作为一条新记录插入到数据表中,
最后firstOrCreate方法会返回记录本身,一个结果集对象,
值得注意的是 !
在firstOrCreate执行之后我们如何确认这个方法是查询到了记录还是执行了新增操作?
为此框架为我们提供了一个wasRecentlyCreated属性来确认firstOrCreate是否执行了新增操作
下面来看一个使用案例:
我需要从数据表查询当天网站的访问人数,如果查询到记录就将访问人数+1,
如果没有查询到就新增一条记录并将访问人数设置为1
//查询条件
$where = ['created_at' => date('Y-m-d')];
//如果没有查询到记录,则将这条数据添加到数据表中
$data = $where + ['count' => 1];
//查询到了记录则获取,没有查询到则新增一条新记录
$log = Log::firstOrCreate($where, $data);
//如果查询到了记录count字段+1
if (!$log->wasRecentlyCreated) {
return $log->increment('count');
}
return $log;