#### 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 | 刪除指定數據(靜態) | 影響的記錄數 |