[TOC]
#### Db用法
~~~
Db::table('user')
->insert([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
]);
~~~
#### 模型用法
~~~
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
~~~
或者批量设置
~~~
$user = new User;
$user->save([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
]);
~~~
上面两种方式等效,当你的模型数据比较多不想一一赋值的时候,可以使用后者。
如果你通过外部提交赋值给模型,并且希望指定某些字段写入,可以使用:
~~~
$user = new User($_POST);
// post数组中只有name和email字段会写入
$user->allowField(['name','email'])->save();
~~~
如果需要过滤非数据表字段的数据,可使用:
~~~
$user = new User($_POST);
// 过滤post数组中的非数据表字段数据
$user->allowField(true)->save();
~~~
#### 获取自增ID
也许你咋一看还觉得麻烦了,又是实例化又是赋值的,但好处多多,慢慢你就会体会到了,看起来是一个简单的赋值和保存操作其实内里大有乾坤,可以触发很多处理甚至事件。
save方法的返回值不是自增主键的值(和Db的execute方法一样返回影响的记录数),要获取自增主键的值可以使用下面的方式:
~~~
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
// 获取用户的主键数据
echo $user->id;
~~~
可以使用静态方法创建数据
~~~
$user = User::create([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
]);
echo $user->id;
echo $user->name;
~~~
和save方法不同,create方法的返回值是User模型的对象实例,而save方法调用的时候本身就在对象实例里面。
很多开发者不习惯静态调用,这里必须说明的是模型类的静态CURD操作其实都是内部自动实例化而已,所以说白了提供的这些静态操作方法只是对动态CURD操作方法的静态封装罢了。
#### 创建操作用法小结
| 方法 | 返回值 |
| --- | --- |
| save(动态)| 影响的记录数 |
| create(静态) | 模型对象实例 |