LaravelのModelについて、Laravel初心者向けに解説していきます。
本記事では、LaravelのModelとは何か、Modelの作成方法、Modelの使い方について説明します。
LaravelのModelの概念と実践までを簡単に理解できる内容になっています。
公開日:2017年9月15日
LaravelのModelとは?
Modelとは、MVCアーキテクチャの「M」にあたる部分で、主にデータベースとの連携を行います。
LaravelにおけるModelは、Eloquent(DBのデータを操作する実装)の機能とビジネスロジックを持ったクラスです。
基本的には1つのテーブルに1つのModelが存在します。
(中間テーブルなどModelを持つ必要がないケースもあります)
LaravelのModelを作成する前に、.envファイルの以下の部分を適宜設定しておきましょう。
1 2 3 4 5 |
.env DB_HOST=host DB_DATABASE=database DB_USERNAME=username DB_PASSWORD=password |
データベースの設定は、config/database.phpに記述されていますので、そちらも中身を確認し、必要に応じて.envファイルに環境変数をセットしておきましょう。
Laravelを初めて使用するという方は「作って覚えるPHP Laravel 使い方やインストール方法も!」の記事をご確認ください。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >Modelの作成方法
LaravelのModelはartisanコマンドで簡単に作成することができます。
php artisan make:model User
Modelの生成先を指定したい場合はModel名の前にパスを指定します。
php artisan make:model Models\User
ちなみにModelを削除したい場合は、オプションが用意されていないため、手動でファイルを削除する必要があります。
Modelの命名規則
LaravelのModelには命名規則があります。
例えば、テーブル名がusersの場合、Model名はUserになります。
テーブル名を単数形にしたものがModel名となり、自動的にテーブルを操作することができるようになります。
この命名規則は絶対的なものではなく、テーブル名を明示的に指定することもできます。
その場合は$tableをオーバーライドしましょう。
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'premium_users'; } |
このようなカスタマイズ方法は、大抵はLaravelのドキュメントにて説明されていますが、中にはコアの実装を見ることで方法を知るケースもあるので、Laravelのコアのソースを時間がある時にでも読んで見ると良いでしょう。
(cf. [Laravel APi](https://laravel.com/api/5.4/index.html))
今回のケースはドキュメントで説明されているものですが、Laravel APIにてIlluminate\Database\Eloquent\Model
の実装を確認しておくと今後の開発のために良い勉強になるでしょう。
modelsディレクトリの扱いについて
LaravelにはModelsディレクトリがデフォルトでは用意されていませんが、これには理由があります。
それは、Laravelの開発者が、”models”という名前の定義が開発者によって大きく異なるということを考慮したからです。
開発者によってModelの扱いが異なるため、デフォルトでmodelsというディレクトリを用意せず、Laravelを使う開発者にその扱いを委ねるようにしました。
したがって、modelsディレクトリを用意したい場合は、appディレクトリ以下にmodesを手動で用意すると良いでしょう。
appディレクトリの外に用意したい場合はcomposer.jsonにオートロードの設定をする必要があります。
Modelを使う
それでは実際にModelを使ってみましょう。
データを用意して、モデルを作成し、コントローラーでモデルを呼び出して用意したデータを出力することができるか確認します。
まずは、migrationファイルを用意します。
php artisan make:migration create_user_tables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUserTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { // } /** * Reverse the migrations. * * @return void */ public function down() { // } } |
作成されたmigrationファイルを以下のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUserTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { $table->increments('id'); $table->string('name'); $table->timestamps(); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('users'); } } |
続いて、初期データを用意するためシーダーを作成します。
php artisan make:seed UserTableSeeder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php use Illuminate\Database\Seeder; class UserTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // } } |
作成されたシーダーファイルを次のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php use Illuminate\Database\Seeder; class UserTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->db->table('users')->insert([ 'name' => 'default_user', ]); } } |
作成したシーダーを実行できるようapp/database/seeds/DatabaseSeeder.php
を編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(UserTableSeeder::class); } } |
マイグレーションとシーダーの用意ができたので、マイグレーションとシーダーを実行してみましょう。
php artisan migrate
php artisan db:seed
マイグレーションとシーターを同時にした場合は、以下のようにmigrateコマンドにオプションを付けることで同時に実行することができます。
php aritsan migrate --seed
開発環境のMySQLにログインして、テーブルとデータがセットされたか確認してみましょう。
(MySQLへのログインコマンドは各自に環境に合わせて実行してください。ここでは割愛します。)
使いたいテーブルを指定します。use demo;
テーブル構造を出力します。DESC users;
+————+——————+——+—–+———+————-+
| Field | Type | Null | Key | Default | Extra |
+————+——————+——+—–+———+————-+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+————+——————+——+—–+———+————-+
4 rows in set (0.00 sec)
データを確認します。select * from users;
+—-+————–+———————+———————+
| id | name | created_at | updated_at |
+—-+————–+———————+———————+
| 1 | default_user | 2017-08-12 21:03:00 | 2017-08-12 21:03:00 |
+—-+————–+———————+———————+
1 row in set (0.00 sec)
テーブルとデータの確認ができたので、コントローラーでモデルを呼び出してみましょう。
コントローラーを作成します。
php artisan make:controller UserController
作成されたコントローラーにindexメソッドを以下のように追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; // Userモデルを呼び出す class UserController extends Controller { public function index() { $user = User::first(); // Userモデル(usersテーブル)で一番最初にヒットするデータをコレクションで返す dd($user->name); // nameの値をデバッグ } } |
ルーティングの設定をルートファイルに記述したらブラウザで指定のルートにアクセスしてみましょう。
$user->name
の中身がデバッグされているでしょうか?
エラーが出力される場合は、エラーの内容を読んで適宜修正しましょう。
まとめ
いかがでしたでしょうか?
Laravelのモデルについて、その概念と使い方について駆け足で説明しました。
モデルの使い方としてリレーションの説明を省きましたが、複数のモデルを連携して使うために重要な概念なので、モデルの基本な理解ができた方はそちらの勉強に進まれることをオススメします。
【Laravel】イベント予約システムをつくってみよう【Jetstream x Livewire】【TALLスタック】
さまざまな業界で需要のある予約管理システムの中から、日時を指定して予約できるイベント管理システムをハンズオン形式で作っていきます。Datepicker、Carbon、Livewireなどを扱い動的な予約カレンダーなどの構築方法を学べます。
\無料でプレビューをチェック!/
講座を見てみる評価:★★★★★
laravel講座の他にtailwindなども購入してますが、他の講座と比べて実務レベルよりな内容が分かりやすく習得できている気がします。
このコードを引き出しに持っておいて他の開発にも役立ちそうです。
また新しいlaravel講座が出ているようなので次に進みます
評価:★★★★★
以前の講座と同じく講義の進行スピードが大変よく調整されてて気持ちよく進めることが出来ます。
講義で使うlaravelのバージョンは9ですが、8と違うところは「ちなみに8では…」と必ずフォローが入るので、わたしは環境の都合で9に出来なかったのですが、8でも無理なく受講を終えられました。
追加動画、新規講座が楽しみです。
最新情報・キャンペーン情報発信中