#### Db类实现
~~~
Db::table('user')
->delete(1);
~~~
#### 模型类实现
~~~
$user = User::get(1);
$user->delete();
~~~
#### 静态实现
~~~
User::destroy(1);
~~~
delete方法没有任何参数,因此只能删除当前实例的模型数据,destroy方法支持删除指定主键或者查询条件的数据,例如:
~~~
// 根据主键删除多个数据
User::destroy([1, 2, 3]);
~~~
#### 使用闭包
~~~
// 使用闭包条件
User::destroy(function ($query) {
$query->where('id', '>', 0)
->where('status', 0);
});
~~~
#### 闭包使用外部参数
~~~
/**
* 顺序计算开服至今的留存率
*
* 注意:将会删除开服至今的历史计算数据
*
* @return void
*/
public function computeFromOpendate()
{
//获取Character、Llogin、Lregister表最新记录
//
$this->updateToRecent();
//开服日期 '2017-11-24';
$opendate = '2017-12-25';
//闭包删除
$msg = Retention::destroy(function ($query) use ($opendate) {
$query->where('date', '>=', $opendate);
});
dump($msg);
$this->computeInorderFrom($opendate);
}
~~~
早期版本的destroy方法如果传入空值,会删除数据表的所有数据,该问题已经在V5.0.9版本得到修正(不会执行任何删除)。
在模型的删除功能设计的时候,应该尽量用软删除替代实际的删除,一方面是为了避免数据丢失,一方面也是为了性能考虑(数据库的删除操作会导致重建索引,数据量越大影响越大),关于软删除的用法我们放到高级用法中描述。
#### 条件删除
使用数组进行条件删除,例如:
~~~
// 删除状态为0的数据
User::destroy(['status' => 0]);
~~~
#### 闭包删除
例如:
~~~
User::destroy(function($query){
$query->where('id','>',10);
});
~~~
#### 数据库类的查询条件删除
~~~
User::where('id','>',10)->delete();
~~~
删除操作用法小结:
|方法| 作用 | 返回值 |
| --- | --- | --- |
| delete | 删除当前数据 | 影响的记录数 |
| destroy | 删除指定数据(静态) | 影响的记录数 |