Laravel:SoftDelete(論理削除)を稼働させる
LaravelのSoftDelete(論理削除)を稼働させる
やっぱり必要だよ論理削除。と言うことで仕込みだけはしてあったSoftDeleteを稼働させることにしました。
なんで論理削除が必要か
私の作成しているシステムはネットショップへの出品サポートが目的のシステムであるため、商品の情報コントロールが必要です。その中でも重要な要素となるものが『効果のあるものを選択する』というABテスト機構です。
残念ながら効果的な効果測定の手段を見つけられていないため、テスターとしてはまだ使えませんが【作った奴を保存しておく】そんな機能は常日頃から欲しいと思っており実装しました。
だってねぇ「検索アルゴリズムが変わって順位落ちて商品名変えたらもっと落ちた、元に戻したい」何て事ザラにありますから。店舗ってこんな無駄な苦労してるんですよ、モール運営企業さんたち!
そして「以前の人気商品が復活! あっ...データ削除しちゃってる...」なんて事もたまにあります。
そうなると次の思いが生まれます。
- 廃盤になった商品データは表示させないで欲しい
- 廃盤になった商品データを復活させたい
- 今使ってないけど前使っていたデータをみたい&差替えたい
いやぁ~矛盾してますね。
でもこの矛盾こそが削除したことにするというsoftdeleteの力の発揮場所だったりするのです。
Laravelの論理削除は Migrations でもサポート充実で簡単
マイグレーションにこの1文を加えるだけで論理削除カラム【deleted_at】を作成してくれます。
いやぁ~超便利。
あとはModelにsoftdelete使ってねと指示をするだけで完了。Controllerで【where('deleted_at',NULL)】なんて抽出をしなくても勝手にコントロールしてくれます。
実際のコードについて
以降、実際のコードを書いてみます。
■マイグレーション
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->string('id')->primary();
$table->unsignedInteger('color_id')->default(0);
$table->unsignedInteger('stocktype_id');
$table->string('makercode')->nullable();
$table->string('jan')->nullable();
$table->softDeletes();
$table->timestamps();
});
}
}
■モデル
use Illuminate\Database\Eloquent\Model;
#論理削除の場所を指示
use Illuminate\Database\Eloquent\SoftDeletes;
class Hogehoge extends Model
{
#論理削除の利用を宣言
use SoftDeletes;
...}
■コントローラー
public function delete($id)
{
Hogehoge::find($id)->delete();
return redirect()->to('hogehoges');
}
まとめ
商品DBなどの構築ではCRUDのUもDも絶対に必要です。
効率と運用を考えると、ソフトdelete機能は選択肢の一つに上がります。
こんな機能に充実したサポートがある。
「Laravel楽だわ」とベタ打ちしていた私は強く思ってしまいました。

