刪除資料

🚫 單筆或多筆的刪除資料

情境

資料庫

Model

namespace M;

class User extends Model {}

單筆刪除

Model 物件可使用 delete method 將該筆資訊從資料庫刪除,刪除成功則回傳 true,失敗則回傳 false

$user = \M\User::one(2);
$result = $user->delete();

echo $result ? '刪除成功' : '刪除失敗';

$user = \M\User::one(2); // 重新抓一次資料,應該會為 null
echo $user ? '未刪除' : '已經成功刪除'; // 已經成功刪除

多筆刪除

有兩種方式,可採用 deleteAll 或者 where 優先 的方式來完成多筆刪除,成功即回傳 true,失敗則 false,通常會以 where 優先 的方式為主要寫法。

  • deleteAll 方式,第一參數開始即為條件。

  • where 優先,則是先下好 where 條件後,在 delete 符合條件的資料。

// deleteAll 的方式
$result = \M\User::deleteAll('id > ?', 1);
echo $result ? '刪除成功' : '刪除失敗';

$total = \M\User::count(); // 取得所有數量
echo $total; // 1

// where 優先的方式
$result = \M\User::where('id > ?', 1)->delete();
echo $result ? '刪除成功' : '刪除失敗';

$total = \M\User::count(); // 取得所有數量
echo $total; // 1

刪除之後

此功能只給 單筆刪除 使用!

如果每次刪除一筆 User 資料時,就要將其他資料也一並刪除,那就可以在 afterDeletes 內指定一個刪除完後需要做的 method,如果 afterDeletes 中若有一個回傳不是為 true,那此次刪除就會是失敗的,該 delete 即回傳 false

通常這類功能可以用在 計數 功能的欄位上。

// 定義 Model
class User extends Model {
  static $afterDeletes = ['clean'];

  public function clean() {
    User::deleteAll();
    return true;
  }
}

// 新增一筆
$user = \M\User::one(2);
$result = $user->delete();

if ($result) { // 刪除成功
  echo \M\User::count(); // 0
}

Last updated

Was this helpful?