LaravelにはDatabaseを操作する便利なORMが標準で用意されていますが、結局どれを使うのがベストなのかわからなかったりします。
今回は、Laravelを用いてデータベースにデータを入れるならcreateメソッドが最強ということになりそうなので、解説していきます。
Laravelでデータベースにデータを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が用意されているので、ぜひ公式のドキュメントも一読してみてください!