9. モデルとデータベース
Laravelのモデル
Modelクラス継承
LaravelのモデルファイルはModelクラスを継承することで、データベース操作が簡単にできるようになっています。
モデルファイル
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
use HasFactory;
}
モデルファイル作成
モデルファイルは make:model で自動作成できます。
ターミナル
php artisan make:model モデル名
Modelの管理フォルダ
モデルファイルは 「app/Models/」をベースに作成されます。
Migrateオプション
「-m」を指定すると、マイグレーションファイル付きで作成します。
ターミナル
php artisan make:model モデル名 -m
データベースの用意
モデルファイルでデータベース操作するには、データベース作成と設定が必要です。今回はMySQLで簡単なデータベースを作成して接続してみましょう。
データベース作成
クライアントツールで作成する場合
「MySQLWorkBench」や「phpMyAdmin」などのクライアントツールで「laravel_sample」データーベースを作成します。
phpMyAdmin
MySQL Workbench
ターミナルで作成する場合
ターミナルでMySQLにログインします。
mysql -u root -p
MySQL初期パスワード
「MAMP」「XAMPP」の初期パスワードです。
- MAMP(Mac):root
- XAMPP(Win):なし
DB作成
CREATE DATABASE
DB作成するには「CREATE DATABASE」のSQL文を実行します。
create database データベース名;
MySQLでログインしたら「laravel_sample」を作成します。
create database laravel_sample;
DB接続設定
.env設定
「.env」ファイルはアプリの個別設定をするファイルです。
- アプリ名
- DB設定
- メール設定など
接続設定
「.env」ファイルにある「DB_xxx」の定数に、DB接続設定を記述します。 各種設定は環境によってあわせてください。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_sample
DB_USERNAME=root
DB_PASSWORD=
キャッシュクリア
「.env」ファイルを修正したら、artisanコマンドでキャッシュをクリアします。
php artisan config:cache
DB接続確認
ターミナルからDB接続できるか確認をします。
tinker
tinkerは、REPL(対話式)モードでプログラムを実行できるLaravelのプログラムです。
php artisan tinker
DB接続確認
コマンド入力モードになったら、DB接続プログラムを入力して実行します。
>>> DB::select('select 1');
成功すると以下のような結果が返ってきます。
>>> DB::select('select 1');
=> [
{#3628
+"1": 1,
},
]
tinker終了
exit で「tinker」を終了します。
>>> exit
データベースマイグレーション
データベースマイグレーションとは?
Database Migration(データベースマイグレーション)は、ファイルにSQLを記述しDBのテーブル定義の更新履歴管理する仕組みです。
- テーブル作成・削除
- カラム追加・カラム削除
- カラム名、データ型など変更
- 外部キー設定
Laravelのマイグレーション
「migrations」フォルダ
マイグレーションファイルは「database/migrations/」の中でファイル管理します。
Blueprintライブラリ
LaravelのマイグレーションはBlueprintというスキーマ管理ライブラリでDDL(テーブル定義)をプログラミングします。デフォルトで最低限のプログラムが記載されており、必要な部分を追加してテーブル定義します。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('items');
}
}
- up() :マイグレート更新処理
- down() :ロールバック処理
テーブルとモデル
DBテーブルのデータはモデルファイルを経由して操作します。「Model」クラスとマイグレーションファイルを作成してテーブル定義が必要です。
モデルファイル作成
「Item」モデルをマイグレーションファイル付きで作成します。
ターミナル
php artisan make:model Item -m
モデルファイル確認
「app/Models/」に「Item.php」が作成されました。
Itemモデルには、DBデータを操作できるような最低限のプログラムが作成されています。
App/Models/Item.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
use HasFactory;
}
テーブル定義
今回作成するitemsテーブルの定義です。
itemsテーブル
項目 | カラム名 | データ型 | NOT NULL | オプション |
---|---|---|---|---|
ID | id | bigint unsigned | Yes | Primary Key, auto_increment |
商品名 | name | varchar(255) | Yes | |
値段 | price | int | Yes | |
作成日 | created_at | timestamp | Yes | |
更新日 | updated_at | timestamp | Yes |
マイグレーションファイル確認
モデル作成時に「database/migrations/」に「xxxx_create_items_table.php」ファイルが自動作成されているので確認してみましょう。「xxxx」の部分は作成日時でマイグレーションファイルの実行順に関係します。
「items」テーブルのマイグレーションファイルです。
databases/migrations/xxxx_create_items_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('items');
}
};
カラム追加
「up」メソッドにカラムを追加しますが、SQLでなくPHPプログラム(Blueprint)で記述します。
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('name', 255);
$table->integer('price');
});
}
マイグレート実行
現時点ではDBにテーブルが作成されていないので、migrateコマンドでマイグレート実行をします。
php artisan migrate
マイグレートが成功しました。
テーブル作成確認
テーブルが作成されたか、DBクライアントで確認してみましょう。