MENU

Laravelのinsertはcreateメソッドを使うのがベストな選択肢になる

2019 6/17
Laravelのinsertはcreateメソッドを使うのがベストな選択肢になる

LaravelにはDatabaseを操作する便利なORMが標準で用意されていますが、結局どれを使うのがベストなのかわからなかったりします。

今回は、Laravelを用いてデータベースにデータを入れるならcreateメソッドが最強ということになりそうなので、解説していきます。

目次

Laravelでdatabaseにデータをinsertする方法

Laravelでデータをinsertする方法としては大きく、

  • createを使用する
  • fill+saveを使用する
  • Laravelで直接SQLを実行させる

方法があります。

SQLを直接実行するのは、カラムへの挿入制御などもできませんし、基本的にはあまりいい方法とは言えません。したがって今回は上2つの方法について見ていくことにします。

createメソッドの使い方

基本的なcreateメソッドの使い方としては、Modelクラスに guarded (データの挿入を禁止するカラムを指定)か fillable (データの挿入を許可するカラムを指定)してあげた上で、必要な場所でcreateメソッドを呼びます。
Modelクラス

class User extends Model
{
    // Some functions...

    // name, email, passwordカラムにデータの挿入を許可する
    protected $fillable = [
        'name', 'email', 'password',
    ];
}

データベースに挿入するクラス

class UserRepository
{
    public functions insertUser() {
        // Userのmodelクラスのインスタンスを生成
        $user = new User();

                // データベースに値をinsert
        $user->create([
            'name' => 'testname',
            'email' => 'mail@test.com',
            'password' => 'testpassword',
        ]);
    }
}

使い方は非常にシンプルで簡単ですね!

fill+saveを使用する場合

Laravelのフレームワークの中身を見ていくとわかりますが、fill+saveはcreateと内容は同じになります。

したがって、上記のようにデータを挿入する場合、下記のようにできます。

データベースに挿入するクラス

class UserRepository
{
    public functions insertUser() {
        // Userのmodelクラスのインスタンスを生成
        $user = new User();

                // User modelの値を埋める
        $user->fill([
            'name' => 'testname',
            'email' => 'mail@test.com',
            'password' => 'testpassword',
        ]);

        // データベースに値をinsert
        $user->save();
    }
}

fill+saveがcreateと同じ動作をしていることがわかっていただけるのではないでしょうか。

insertしたUserのデータを使いたい場合

insertに成功した$userのデータを使用したい場合もあるかと思います。createメソッドはありがたいことにデータベースに保存したmodelインスタンスを返してくれます。

どういうことかというと、

データベースに挿入するクラス

class UserRepository
{
    public functions insertUser() {
        // Userのmodelクラスのインスタンスを生成
        $user = new User();

                // 保存したデータを$modelに格納
        $model = $user->create([
            'name' => 'testname',
            'email' => 'mail@test.com',
            'password' => 'testpassword',
        ]);

       dd($model->name) // "testname"
    }
}

というように簡単に保存したデータの値を取得することができるのです。

この他にも様々なORMが用意されているので、ぜひ公式のドキュメントも一読してみてください!

- 3ヶ月でエンジニア転職を目指そう -

  • 解決できないエラーに心が折れた
  • 転職に必要なレベルがわからない
  • 本当に今の学習で転職できるか不安

そんな悩みを持っている人に

現役エンジニアが教える3ヶ月でエンジニア転職を実現する方法

を解説しています。

コメント

コメントする

目次
閉じる