Soft Deleting
Lighthouseはソフトデリートを利用した、モデルを扱うための便利なヘルパーを提供しています。
Filter Soft Deleted Models
モデルがIlluminate\Database\Eloquent\SoftDeletes
トレイトを使っている場合、フィールドに @softDeletes ディレクティブを追加することで、onlyTrashed
,withTrashed
,withoutTrashed
のクエリーを実現できます。
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")
}
以下のクエリによって、ソフトデリートされたモデルを取得できます。
ソフトデリートされたモデルをリストアする
モデルがIlluminate\Database\Eloquent\SoftDeletes
トレイトを使用している場合、@restore ディレクティブを使ってモデルをリストアできます。
シンプルに、復元したいフライトのIDを持つフィールドを呼び出せばよいです。
このミューテーションは、リストアされたモデルのオブジェクトを返します。
モデルの永続的な削除
本当にデータベースからデータを削除したい場合は、@forceDeleteディレクディブを使用します。この際、モデルはIlluminate\Database\Eloquent\SoftDeletes
トレイトを利用している必要があります。
この場合も、シンプルにFlight
モデルのIDを指定してコールすることで、DBからデータを永続的に削除することができます。
このミューテーションは削除されたデータのオブジェクトを返します。ですのでこれは削除されたデータをクライアントが取得する、最後のチャンスになります。