모델의 이 속성이 `true`이면 `delete*` 메소드 호출시 실제로 행을 삭제하는 대신 데이터베이스의 `deleted_at` 필드의 값을 수정합니다.
이를 통해 데이터를 복원할 수있는 “휴지통”을 유지하거나 보안 추적의 일부로 보존할 수 있습니다.
논리 삭제(soft delete)를 위한 `deleted_at` 필드는 데이터베이스에 타입에 따라 `DATETIME` 또는 `INTEGER`로 지정되어야 합니다.
필드 이름은 기본적으로 `deleted_at`로 설정되어 있지만 `$deletedField` 속성에 원하는 이름으로 지정할 수 있습니다.
`$useSoftDeletes` 속성은 initialize() 함수가 아닌 class 속성에 직접 지정하여야 정상 동작합니다.
$userModel->where('idx >', 2)->delete();
1
* Query : UPDATE `my_table_tmp_3` SET `deleted_at` = 1764511857 WHERE `idx` = 2
$userModel->findAll();
Array
(
[0] => Array
(
[idx] => 1
[name] => name-1764511857-1
[title] => title-1764511857-1
[email] => email-1764511857-1
[deleted_at] =>
)
[1] => Array
(
[idx] => 3
[name] => name-1764511857-3
[title] => title-1764511857-3
[email] => email-1764511857-3
[deleted_at] =>
)
)
* Query : SELECT * FROM `my_table_tmp_3` WHERE `my_table_tmp_3`.`deleted_at` IS NULL
모델의 `$useSoftDeletes` 속성이 `true`이면 find* 메소드는 ‘deleted_at IS NOT null’인 행을 반환하지 않습니다.
이를 일시적으로 무시하려면 find* 메소드를 호출하기 전에 `withDeleted()` 메소드를 사용합니다.
$userModel->withDeleted()->findAll();
Array
(
[0] => Array
(
[idx] => 1
[name] => name-1764511857-1
[title] => title-1764511857-1
[email] => email-1764511857-1
[deleted_at] =>
)
[1] => Array
(
[idx] => 2
[name] => name-1764511857-2
[title] => title-1764511857-2
[email] => email-1764511857-2
[deleted_at] => 1764511857
)
[2] => Array
(
[idx] => 3
[name] => name-1764511857-3
[title] => title-1764511857-3
[email] => email-1764511857-3
[deleted_at] =>
)
)
* Query : SELECT * FROM `my_table_tmp_3`
이 메소드를 find* 메소드와 같이 사용하면 논리(soft) 삭제된 행만 리턴합니다.
$userModel->onlyDeleted()->findAll();
Array
(
[0] => Array
(
[idx] => 2
[name] => name-1764511857-2
[title] => title-1764511857-2
[email] => email-1764511857-2
[deleted_at] => 1764511857
)
)
* Query : SELECT * FROM `my_table_tmp_3` WHERE `my_table_tmp_3`.`deleted_at` IS NOT NULL
논리(soft) 삭제된 행을 데이터베이스 테이블에서 영구적으로 제거합니다.
$userModel->purgeDeleted();
1
* Query : DELETE FROM `my_table_tmp_3` WHERE `my_table_tmp_3`.`deleted_at` IS NOT NULL
$userModel->withDeleted()->findAll();
Array
(
[0] => Array
(
[idx] => 1
[name] => name-1764511857-1
[title] => title-1764511857-1
[email] => email-1764511857-1
[deleted_at] =>
)
[1] => Array
(
[idx] => 3
[name] => name-1764511857-3
[title] => title-1764511857-3
[email] => email-1764511857-3
[deleted_at] =>
)
)
* Query : SELECT * FROM `my_table_tmp_3`