广告位 |
thinkphp模型数据的新增
2021年9月25日 11:02编程 > 1990人已围观
简介 模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。...
模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。
添加一条数据
第一种是实例化模型对象后赋值并保存:
$user = new User;$user->name = 'thinkphp';$user->email = 'thinkphp@qq.com';$user->save();
save
方法成功会返回true
,并且只有当before_insert
事件返回false
的时候返回false
,一旦有错误就会抛出异常。所以无需判断返回类型。
也可以直接传入数据到save
方法批量赋值:
$user = new User;$user->save([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com']);
默认只会写入数据表已有的字段,如果你通过外部提交赋值给模型,并且希望指定某些字段写入,可以使用:
$user = new User;// post数组中只有name和email字段会写入$user->allowField(['name','email'])->save($_POST);
最佳的建议是模型数据赋值之前就进行数据过滤,例如:
$user = new User;// 过滤post数组中的非数据表字段数据$data = Request::only(['name','email']);$user->save($data);
save
方法新增数据返回的是写入的记录数(通常是1
),而不是自增主键值。
Replace
写入
save
方法可以支持replace
写入。
$user = new User;$user->name = 'thinkphp';$user->email = 'thinkphp@qq.com';$user->replace()->save();
获取自增ID
如果要获取新增数据的自增ID,可以使用下面的方式:
$user = new User;$user->name = 'thinkphp';$user->email = 'thinkphp@qq.com';$user->save();// 获取自增IDecho $user->id;
这里其实是获取模型的主键,如果你的主键不是id
,而是user_id
的话,其实获取自增ID就变成这样:
$user = new User;$user->name = 'thinkphp';$user->email = 'thinkphp@qq.com';$user->save();// 获取自增IDecho $user->user_id;
不要在同一个实例里面多次新增数据,如果确实需要多次新增,可以使用后面的静态方法处理。
批量增加数据
支持批量新增,可以使用:
$user = new User;$list = [ ['name'=>'thinkphp','email'=>'thinkphp@qq.com'], ['name'=>'onethink','email'=>'onethink@qq.com']];$user->saveAll($list);
saveAll方法新增数据返回的是包含新增模型(带自增ID)的数据集对象。
saveAll
方法新增数据默认会自动识别数据是需要新增还是更新操作,当数据中存在主键的时候会认为是更新操作。
静态方法
还可以直接静态调用create
方法创建并写入:
$user = User::create([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com']);echo $user->name;echo $user->email;echo $user->id; // 获取自增ID
和
save
方法不同的是,create
方法返回的是当前模型的对象实例。
create
方法默认会过滤不是数据表的字段信息,可以在第二个参数可以传入允许写入的字段列表,例如:
// 只允许写入name和email字段的数据$user = User::create([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com'], ['name', 'email']);echo $user->name;echo $user->email;echo $user->id; // 获取自增ID
支持replace
操作,使用下面的方法:
$user = User::create([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com'], ['name','email'], true);
上一篇: thinkphp定义模型
下一篇: thinkphp 数据库模型查询
广告位 |
相关文章
随机图文
-
thinkphp定义模型
定义一个模型类很简单,例如下面是一个User模型: <?php namespace app\model;use think\Model;class User extends Model{}... -
商家增长“拐点”在哪里
商品与消费者之间,有着“一体两翼”的关系。“一体”是两者链路之间需要有运营桥梁,而“两翼”便是数据和流量,这就需要线下商家在运营中一手抓数据、一手抓流量。... -
5条建议教你如何选择合适的字体!
点击上方蓝字,把我设置为星标☆吧 时下一种流行的设计方式是在页面顶部使用配有简洁文字的大幅图片或者视频,以此吸引用户进入网站。这种设计方式最头疼的就是如何为这些文字选择合适的字体。 从样式繁... -
出圈的B站,走不出“网络侵权”围城
在8月公布2021 Q2财报后,B站虽然暂时遏制住了股价下跌的颓势,但亏损持续扩大,游戏业务依旧疲软,以及国内政策日趋收紧等情况,导致市场对于“破圈”之后的发展不再像之前那样盲目乐观,这使得压力重新回到了B站的身上。...