概要
LaravelでのDB操作にはEloquentとQuery Builderがあります。
操作対象のテーブルに論理削除の概念があった場合、QueryBuilderには注意が必要です。
QueryBuilderはデフォでは削除済みデータも含む
Eloquentで[全て取得、削除済みも含む]
QueryBuilderで[全て取得]
処理を行います
さんぷる
dd([
'Eloquent:User all' => User::all(),
'Eloquent:User withTrashed' => User::withTrashed()->get(),
'QueryBuilder:User get' => DB::table('users')->get(),
]);
結果
array:3 [
"Eloquent:User all" => Illuminate\Database\Eloquent\Collection {#1408 ▼
#items: array:3 [▶]
#escapeWhenCastingToString: false
}
"Eloquent:User withTrashed" => Illuminate\Database\Eloquent\Collection {#1412 ▼
#items: array:4 [▶]
#escapeWhenCastingToString: false
}
"QueryBuilder:User get" => Illuminate\Support\Collection {#1179 ▼
#items: array:4 [▶]
#escapeWhenCastingToString: false
}
]
QueryBuilderでdeleted_atに条件指定せずにget()
した場合削除済みのデータまで引っ張ってしまいます。