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が用意されているので、ぜひ公式のドキュメントも一読してみてください!

SNSでもご購読できます。

コメントを残す

*