
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
テーブルの要素として name
と price
が存在するとします。
public function test()
{
// 新しいモデルインスタンスを作成
$product = new Product;
// 新しいモデルに属性を設定
$product->name = "Tシャツ";
$product->price = 2000;
// データを保存
$product->save();
}
save
メソッドを利用するとテーブルのタイムスタンプ(created_at
と updated_at
)は自動的に作成されます。
create
メソッド
データを作成するもう一つの方法として create
メソッドがあります。メソッドの引数には作成したいモデルの属性をキーにした配列を入力します。
public function test()
{
// モデルの属性をキーにした配列を引数に入れる
Product::create([
"name" => "Tシャツ",
"price" => 2000
]);
}
create
メソッドは一度に複数の属性(上記の例だと name
と price
)を指定してデータの作成ができます。このように複数の属性が関わるデータ操作を 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'];
}
fillable
と guarded
は「どちらかだけ指定すればOK」です。両方とも指定することはありません。
formからリクエストされた値を使ってデータを作成する方法は以下の記事にまとめています。
データの編集
save
メソッド
データの作成で利用した save
メソッドもデータの更新に利用できます。
データの更新をするには以下の手順を踏む必要があります。
- 更新対象のデータを見つける
- 更新したい属性にデータをセットする
- 保存する
例としてproducts
テーブルの要素として name
と price
が存在するとします。 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のチュートリアルではモデルを使って簡単なアプリケーションを作っています。