【Laravel】Eloquentで論理削除されたレコードを取得する方法

Laravelで論理削除されたデータを取得する方法についてまとめます。

実務において、論理削除されたレコードも含めてデータを取得する機会があったので、以下の3パターンの方法についてご紹介します。

  • 論理削除されたレコードのみ取得
  • 論理削除されたレコードを含めて取得
  • 論理削除されたレコードの復元

前提となるデータ

こちらのテーブルからデータを取得していきます。

sponsor table

idnamecreated_atupdated_atdeleted_at
1first2022-01-01 00:00:002022-01-01 00:00:00
2second2022-01-01 00:00:002022-01-01 00:00:00
3third2022-01-01 00:00:002022-01-02 00:00:002022-01-02 00:00:00

論理削除されたレコードのみ取得

下記のメソッドを利用することで、論理削除されたレコードのみ取得することができます。

Sponsor::onlyTrashed()->get();
array(1) {
  [0] =>
  array(5) {
    'id' => 3
    'name' => "third"
    'created_at' => "2022-01-01 00:00:00"
    'updated_at' => "2022-01-02 00:00:00"
    'deleted_at' => "2022-01-02 00:00:00"
  }
}

論理削除されたレコードを含めて取得

下記のメソッドで論理削除されているレコードを含めて取得することができます。

Sponsor::withTrashed()->get();
array(3) {
  [0] =>
  array(5) {
    'id' => 1
    'name' => "first"
    'created_at' => "2022-01-01 00:00:00"
    'updated_at' => "2022-01-01 00:00:00"
    'deleted_at' => NULL
  }
  [1] =>
  array(5) {
    'id' => 2
    'name' => "second"
    'created_at' => "2022-01-01 00:00:00"
    'updated_at' => "2022-01-01 00:00:00"
    'deleted_at' => NULL
  }
  [2] =>
  array(5) {
    'id' => 3
    'name' => "third"
    'created_at' => "2022-01-01 00:00:00"
    'updated_at' => "2022-01-02 00:00:00"
    'deleted_at' => "2022-01-02 00:00:00"
  }
}

論理削除されたレコードの復元

idを指定することによって、レコードを復元することができます。

以下のコードにより、sponsorテーブルのdeleted_atの内容が空になります。

Sponsor::onlyTrashed()->whereId(2)->restore();

コメント

タイトルとURLをコピーしました