スライドショースライドショー

【PHP/Laravel入門】データベース内のデータを削除する方法まとめ

みなさんこんにちは、エンジニアのオータケです!

今回はLaravelを使ったデータベース内のデータ削除についてお話をしたいと思います。

まずデータの削除方法が2つあることを皆さんはしっていますか?

「え?データの削除方法って一つじゃないの?」
「2種類あるのは知っているけど、Laravelでの書き方がわからない」

といった方は必見です!

本記事では

[基本]論理削除と物理削除の違い
[基本]論理削除を意識したマイグレーションファイルの編集
[実践]データ削除の方法

について解説をしていきます。

データの削除はWebアプリケーションを作る上でよく出てくる話でもあるので皆さんしっかり学んでいきましょう!

Laravelとは?

まず、「Laravelが何かわからない」という方もいるかと思います。

そういった方にはLaravelとは何かをとても詳しく解説した記事がありますので次の記事をご覧ください。

この記事を読んでいただければ「今、流行りのLaravel」について知ることができますよ!

Laravelとは?PHPの主流WEBフレームワークを徹底解説
更新日 : 2019年8月14日

よく聞く「論理削除(SoftDelete)」と「物理削除(HardDelete)」

そもそも論理削除と物理削除とは?

まず論理削除物理削除の違いについて説明をしたいと思います。

言葉を見る限りとても難しく感じそうですが、至って簡単です。

わかりやすく一言で表せば、

論理削除・・・実際にはデータは消えてないが、表面的に消えたことにしてしまう
物理削除・・・実際にデータを削除する

という違いがあります。

これらにどういった違いがあるかというと、ある掲示板があったとします。

書き込みを削除したけどあとからやっぱり書き込みを復活させたい、間違って削除してしまったという場合には論理削除を用います。

逆に完全にデータを削除しておきたいという場合には物理削除を用います。

Laravelの場合、特に何も設定をしなければ物理削除でデータを削除します。

もし、論理削除をしたい場合は次の項から見ていってください。

物理削除の場合は「実際に削除してみる」からでも構いません。

まずはマイグレーションファイルから

論理削除を行いたい場合はテーブルの構造を変える必要があるため、Laravelでプロジェクトを作った際にデフォルトで生成されるXXXXX_create_users_table.phpを変える必要があります。
(XXXXXは日付)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->softDeletes();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

このコードでデフォルトで生成されるコードとの違いが一箇所あります。

どこだかわかりますか?

$table->softDeletes()というメソッドを呼び出しているところがあるかと思いますがこのメソッドを呼び出すことでマイグレーション時にテーブル内に削除されたか削除されていないかを判断できるカラムが追加されることになっています。

ちなみにこの削除されたか削除されていないかのカラムですが特に指定がなければdeleted_atが自動的に作られる仕組みになっています。

この行を追加したらマイグレーション作業を行ってテーブル構造をリフレッシュしてみましょう。

実際に削除してみる

この項では先程マイグレーションした内容をもとに実際にデータを削除してみます。

論理削除の場合はモデルに少し設定の追記が必要です。
といっても、3行文追加するだけで大丈夫です。

では論理削除に対応したUserモデルを見てみましょう!

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Authenticatable
{
    use Notifiable;
    use SoftDeletes;
    
    protected $dates = [ 'deleted_at' ];

    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

ここからはデータの削除方法なので論理・物理削除共通になります。

例えば、特定のユーザーを削除したい場合

$user = App\User::find(1);
$user->delete();

とすることで削除することが可能です。

論理削除したデータも含めて取得する

最後に論理削除したデータを含めて取得する際にはどういった処理を書けばよいでしょうか?

これも簡単です。

withTrashedメソッドを使うことで実現できます。

App\User::withTrashed()->where('id', '>', 100);

このコードの場合はusersテーブルのIDが100よりも大きい論理削除済みを含めたデータを取得するという内容になっています。

まとめ

いかがだったでしょうか?

論理削除物理削除の意味から実際に削除する方法まで解説をしました。

自分の作成しているサービスに沿って、論理削除と物理削除を使い分けていく必要があるかと思います。

Laravelはとても便利なのでこういった機能が少ない記述量で実現することができます。

どんどん覚えて使っていきましょう!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

オータケ

オータケ

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説