广告位 |
thinkphp模型数据的新增
2021年9月25日 11:02编程 > 2487人已围观
简介 模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。...
模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。
添加一条数据
第一种是实例化模型对象后赋值并保存:
$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无限分类
很多网站的首页上都会展示很多的分类,诸如:京东,淘宝,C站等等,都是利用Django模型中的自关联做的,今天做一期无限级分类的Blog! 定义了一个基本的模型用于继承(创建时间和更新时间)... -
ETF基金:红利ETF的解读与投资攻略
今年红利ETF也火了,很多人都是冲着红利二字而来,却不知红利ETF的全名,有一个叫做上证红利ETF (510880),还有一个叫做中证红利ETF(515080),其实去年也有一个红利ETF很火,叫做深证红利ETF (159905),一共是三个不同的红利ETF,也就是我们常说的红利三兄弟。... -
thinkphp数据库模型一对多关联
关联模型(必须):关联模型类名 外键:关联模型外键,默认的外键名规则是当前模型名+_id 主键:当前模型主键,一般会自动获取也可以指定传入... -
全球公认的“最佳饮食榜”发布!
国庆假期第一天,想必大家都吃得好、喝得好、玩得好~不过想要日子过得好,饮食一定得讲究,我们可以利用食物的营养来防治疾病,促进健康长寿。但是吃得不对,很多疾病也会找上门!像三高、心血管疾病、癌症都与吃有...