Laravel モデルを使ったデータの作成、更新、削除

Laravelではデータベースの各テーブルに対応する Model(モデル) と呼ばれるものが存在します(Eloquent Modelと呼ばれることもあります)。

モデルを使うことによってデータを追加したり、削除したり、検索したりできます。この記事ではモデルを利用したデータを作成、更新、削除方法をまとめます。

前提

Laravelのアプリケーションとデータベースの接続が必要になります。以下の記事を参考にして、データベースの接続はしておきましょう。

データベースへの接続方法 (エラー対策付き)

また今回はProductsテーブルに対応している Product モデルを作成して使います。以下のコマンドをターミナルで実行してください。

$ php artisan make:model Product

コマンドを実行したら app ディレクトリ配下に Product.php というファイルが作成されていればOKです👍

モデルの作成方法、データの取得方法については以下の記事を参考にしてください。

参考:モデルの作成とデータ取得

モデルを使ったデータの操作

今回はControllerの中で利用することを想定して、以下のような ProductsController と testアクション を作成しました。

※ Productモデル を利用するためにファイル上部で use App\Product; と書かれていることを確認してください。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Product;

class ProductsController extends Controller
{
    public function test()
    {
        //
    }
}

データ追加

save メソッド

データベースに新しいデータを作成するには、新しいモデルインスタンスを作成し、モデルに属性を設定してから、save メソッドを利用してデータを保存します。

例として products テーブルの要素として nameprice が存在するとします。

public function test()
{
    // 新しいモデルインスタンスを作成
    $product = new Product;

    // 新しいモデルに属性を設定
    $product->name  = "Tシャツ";
    $product->price = 2000;

    // データを保存
    $product->save();
}

save メソッドを利用するとテーブルのタイムスタンプ(created_atupdated_at)は自動的に作成されます。

create メソッド

データを作成するもう一つの方法として create メソッドがあります。メソッドの引数には作成したいモデルの属性をキーにした配列を入力します。

public function test()
{
    // モデルの属性をキーにした配列を引数に入れる
    Product::create([
        "name"  => "Tシャツ",
        "price" => 2000
    ]);
}

create メソッドは一度に複数の属性(上記の例だと nameprice)を指定してデータの作成ができます。このように複数の属性が関わるデータ操作を Mass Assignment(マス アサインメント) と言います。

複数の属性を一度に指定する Mass Assignment を利用する場合にはモデルに編集を加える必要があります。

指定したい属性は fillable で指定します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    // Mass Assignmentする属性
    protected $fillable = ['name', 'price'];
}

また指定されたくない属性は guarded で指定します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    // Mass Assignmentしたくない属性
    protected $guarded = ['id'];
}

fillableguarded は「どちらかだけ指定すればOK」です。両方とも指定することはありません。

formからリクエストされた値を使ってデータを作成する方法は以下の記事にまとめています。

【Laravel チュートリアル】タスク新規作成画面

データの編集

save メソッド

データの作成で利用した save メソッドもデータの更新に利用できます。

データの更新をするには以下の手順を踏む必要があります。

  • 更新対象のデータを見つける
  • 更新したい属性にデータをセットする
  • 保存する

例としてproducts テーブルの要素として nameprice が存在するとします。 id = 1 のデータを更新してみます。

public function test()
{
    // id = 1 のデータを見つける
    $product = Product::find(1);

    // 更新したい属性にデータをセット
    $product->name  = "かっこいいTシャツ";
    $product->price = 4000;

    // データを保存
    $product->save();
}

save メソッドを利用するとテーブルのupdated_atは自動的に作成されます。

update メソッド

データを更新するもう一つの方法として update メソッドがあります。メソッドの引数には更新したいモデルの属性をキーにした配列を入力します。

public function test()
{
    // id = 1 のデータを見つける
    $product = Product::find(1);

    // モデルの属性をキーにした配列を引数に入れる
    $product->update([
        "name"  => "Tシャツ",
        "price" => 2000
    ]);
}

update メソッドも複数の属性を指定してデータ操作ができます。 create メソッドの時と同じように Mass Assignment なのでモデルを修正する必要があります。

formからリクエストされた値を使ってデータを更新する方法は以下の記事にまとめています。

【Laravel チュートリアル】タスク管理アプリ開発:タスク編集画面

データの削除

delete メソッド

delete メソッドを利用してデータを削除します。削除をするデータを見つけ、データを削除します。

public function test()
{
    // id = 1 のデータを見つける
    $product = Product::find(1);

    $product->delete();
}

destory メソッド

データを削除するもう1つの方法として destory メソッドがあります。引数に削除するデータのidを入力します。

public function test()
{
    // id = 1 のデータを削除する
    Product::destroy(1);
}

まとめ

この記事では以下のことを書きました。

  • モデルを使ったデータの作成
  • モデルを使ったデータの更新
  • モデルを使ったデータの削除

Laravelのモデルを使うとSQLを書かずにデータベースのデータ操作が簡単にできます。以下のLaravelのチュートリアルではモデルを使って簡単なアプリケーションを作っています。

【Laravel チュートリアル】タスク管理アプリ