广告位 |
thinkphp模型数据的新增
2021年9月25日 11:02编程 > 3323人已围观
简介 模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。...
模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。
添加一条数据
第一种是实例化模型对象后赋值并保存:
$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 数据库模型查询
广告位 |
相关文章
随机图文
-
django与百度ueditor 结合
django与百度ueditor 结合实现文件上传,图片上传。但还有如下功能没实现: 1. 在线涂鸦后,图片的保存,并显示 2. 图片的在线管理,浏览(目录递归浏览) 3. 在线视频搜索 4. 远程抓图... -
iPhone 13系列配备了更大的电池
随着所有四款iPhone 13都开始在世界各地发售,YouTube上开始出现了对这些设备的拆解。值得注意的是,拆解显示了所有四款机型的电池容量。... -
ETF基金:红利ETF的解读与投资攻略
今年红利ETF也火了,很多人都是冲着红利二字而来,却不知红利ETF的全名,有一个叫做上证红利ETF (510880),还有一个叫做中证红利ETF(515080),其实去年也有一个红利ETF很火,叫做深证红利ETF (159905),一共是三个不同的红利ETF,也就是我们常说的红利三兄弟。... -
thinkphp数据库模型一对多关联
关联模型(必须):关联模型类名 外键:关联模型外键,默认的外键名规则是当前模型名+_id 主键:当前模型主键,一般会自动获取也可以指定传入...