データベースとの連携(4)elequent
Laravelでは、データベースをPHPのプログラムとしてより直感敵な操作を行うためのORMがある。PHPのクラスを操作しているような感覚でデータベースの操作ができるのでSQLに慣れていない方でも容易にDB操作をできると言われているが、SQLの知識は必須である。
データベースを操作する際はデータベースその物やSQLの知識は必須なので別途学習しておきましょう。
モデルの作成
LaravelでElequentを使う際は、Modelクラスの作成が必要です。
DBのテーブルアクセスは、Modelクラスを介したアクセスになるからです。
モデルの作成にもコマンドが用意されている。
php artisan make:model モデル名
ここでも「members」テーブルに対応するメンバースモデルを作成します。
1 |
php artisan make:model Member |
Laravelのver.8以降では、app以下のModelディレクトリ内にmemberモデルが作成されます。
Laravelでは、テーブル名が複数形でモデル名は単数形で作成するとテーブルとモデルが自動で紐づけされます。
この関係以外は自分で紐づけしましょう。
その他以下の紐づけやルールがあります。
テーブルとの紐づけ
1 |
protected $table = 'tableName'; |
primary key の紐づけ
1 |
protected $primaryKey = 'keyName'; |
(項目名が「id」の場合は自動で主キーに紐づけられる)
primary key 自動インクリメント属性ではない場合
1 |
public $incrementing = false; |
primary key 整数ではない場合
1 |
protected $keyType = 'string'; |
モデルとタイムスタンプの紐づけが不要の場合
1 |
public $timestamps = false; |
データの登録・更新の対象となる項目(フィールド)はモデルで明示しておく必要がある(これをしないとエラーとなりデータは登録・更新できない)。
1 2 3 4 5 |
protected $fillable = [ 'name', 'age', 'email', ]; |
テーブルにアクセスする場合はモデル経由でもアクセスなので作成したモデルを読み込む。
1 |
use App\Models\Member; |
データベースの準備
「データベースの連携(1)」で使用したMembersテーブルを使います。
まだ作成出来てない場合は、以下のスキーマ―でmigrateを実行してください。
1 2 3 4 5 6 7 |
Schema::create('members', function (Blueprint $table) { $table->increments('id'); $table->integer('age'); $table->string('name'); $table->string('email'); $table->timestamps(); }); |
レコードの新規登録(insert)
新規挿入のクエリを記述する。
新規作成は以下の手順で行います。
①モデルインスタンスの作成
1 |
$member = new Member(); |
②インスタンスに登録する値の設定
1 2 3 |
$member -> name = "山田太郎"; $member -> age = 30; $member -> email = "taro@cyber-genjin.net"; |
③インスタンスを保存する
1 |
$member -> save(); |
以下の方法でも新規登録できます。
1 2 3 4 5 6 7 |
Member::create( [ 'name' => "山川 原人", 'age' => 50, 'email' => "genji@cyber-genjin.net", ] ); |
レコードの取得(select)
テーブルから全権取得
1 |
$members = Member::all(); |
テーブルから主キーのIDを引数に1件取得
1 2 |
$id=値; $members = Member::find($id); |
条件を指定して取得(複数件数)
1 |
$members = Member::where('age','50')->get(); |
レコードの更新(update)
更新の場合は、対象のインスタンスを抽出し、インスタンスの値を更新します。
1 2 3 |
$members = Member::find($id); $members -> age = 53; $members -> save(); |
指定したID番号のレコードの年齢が更新されます。
レコードの削除(delete)
削除の場合も、更新と同様に対象のインスタンスを抽出して削除します。
1 2 |
$members = Member::find($id); $members -> delete(); |
指定したID番号のレコードが削除されます。