> ## 在控制器中调用模型进行更新数据
### 1. 查找并更新(需要知道主键,不需要构造键名和表字段对应的数组)
```
$user = User::get(1);
$user->name = 'thinkphp';
$user->save();
```
### 2. 推荐:直接更新(根据指定条件更新,需要构造键名和表字段对应的数组)
```
$user = new User;
// save方法第二个参数为更新条件
$user->save([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
],['id' => 1]);
```
### 3. 过滤非数据表字段
```
$user = new User();
// 过滤post数组中的非数据表字段数据
$user->allowField(true)->save($_POST,['id' => 1]);
```
### 4. 允许指定字段更新
```
$user = new User();
// post数组中只有name和email字段会写入
$user->allowField(['name','email'])->save($_POST, ['id' => 1]);
```
### 5. 批量更新数据(仅支持根据主键更新)
```
$user = new User;
$list = [
['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']
];
$user->saveAll($list);
// 强制更新非插入
$user = new User;
$list = [
['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']
];
$user->isUpdate()->saveAll($list);
```
### 6. 通过数据库类更新数据
```
$user = new User;
$user->where('id', 1)
->update(['name' => 'thinkphp']);
// 如果包含主键则无需where
$user->update(['id' => 1, 'name' => 'thinkphp']);
// 如果条件更复杂还可以用闭包
$user->save(['name' => 'thinkphp'],function($query){
// 更新status值为1 并且id大于10的数据
$query->where('status', 1)->where('id', '>', 10);
});
```
### 7. 显式插入和更新
```
// 显式指定当前操作为新增操作
$user = User::get(1);
$user->name = 'thinkphp';
$user->isUpdate(false)->save();
// 显式指定更新数据操作
$user = new User;
$user->isUpdate(true)
->save(['id' => 1, 'name' => 'thinkphp']);
```