コンテンツにスキップ

Soft Deleting

Lighthouseはソフトデリートを利用した、モデルを扱うための便利なヘルパーを提供しています。

Filter Soft Deleted Models

モデルがIlluminate\Database\Eloquent\SoftDeletesトレイトを使っている場合、フィールドに @softDeletes ディレクティブを追加することで、onlyTrashed,withTrashed,withoutTrashedのクエリーを実現できます。

type Query {
  flights: [Flight!]! @all @softDeletes
}

Lighthouseは自動的にフィールドの定義に引数 trashed を追加し、また、enumのTrashedを含めます。

type Query {
  flights(trashed: Trashed @trashed): [Flight!]! @all
}

"""
フィルタリングで使われます
"""
enum Trashed {
  ONLY @enum(value: "only")
  WITH @enum(value: "with")
  WITHOUT @enum(value: "without")
}

以下のクエリによって、ソフトデリートされたモデルを取得できます。

{
  flights(trashed: WITH) {
    id
  }
}

ソフトデリートされたモデルをリストアする

モデルがIlluminate\Database\Eloquent\SoftDeletesトレイトを使用している場合、@restore ディレクティブを使ってモデルをリストアできます。

type Mutation {
  restoreFlight(id: ID!): Flight @restore
}

シンプルに、復元したいフライトのIDを持つフィールドを呼び出せばよいです。

mutation {
  restoreFlight(id: 1) {
    id
  }
}

このミューテーションは、リストアされたモデルのオブジェクトを返します。

モデルの永続的な削除

本当にデータベースからデータを削除したい場合は、@forceDeleteディレクディブを使用します。この際、モデルはIlluminate\Database\Eloquent\SoftDeletesトレイトを利用している必要があります。

type Mutation {
  forceDeleteFlight(id: ID!): Flight @forceDelete
}

この場合も、シンプルにFlightモデルのIDを指定してコールすることで、DBからデータを永続的に削除することができます。

mutation {
  forceDeleteFlight(id: 5) {
    id
  }
}

このミューテーションは削除されたデータのオブジェクトを返します。ですのでこれは削除されたデータをクライアントが取得する、最後のチャンスになります。

{
  "data": {
    "forceDeleteFlight": {
      "id": 5
    }
  }
}