icon
icon

モデルを扱う!Laravelでmodelを使う方法【初心者向け】

初心者向けにLaravelでmodelを使う方法について解説しています。データベースを操作する上で欠かせない知識になります。実際にテーブルやカラムを作成しながら説明しているので、ぜひ自分でも書いて理解していきましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Laravelでmodelを使う方法について解説します。

MVCモデルを理解する上でも欠かせない知識になります。実際にテーブルやカラムを作成して理解しましょう。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、Laravelに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Laravelでmodelを使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

mvcのmodelとは

そもそものMVCはデザインパターンの一種であり、Model、View、Controllerの略です。Web フレームワークで言われているMVCが「本来の」MVCとどう違うかなどの議論はありますが、Laravelにおいて非常に単純化すると、

  • Model: データに関する責任を持っています。デフォルトでは Eloquent と言われる ORM に相当します。
  • View: 表示に関する責任を持っています。デフォルトでは blade テンプレートです。
  • Controller: Model と View を管理する責任を持っています。
1時間でできる無料体験!

となります。

 

modelの命名規則と作成方法

Modelは通常テーブルと一対一で対応します。命名規則はテーブル名の単数形です。例えばpostsテーブル (なんらかの投稿データ) に対応するモデルはPostという名前になります。(命名規則に従うとデフォルトでテーブルとの結び付けをしてくれるので便利です。

しかし命名規則に従っていない場合でもModel内の適切なフィールドにテーブル名を明示してあげることで結びつけることができるので、既存のプロジェクトのデータベースを流用して新しい外側を作るといったときも対応することができます)

作成方法はartisanのコマンドを使用します。

php artisan make:model Model名

コマンドを実行すると app ディレクトリ以下にIlluminateDatabaseEloquentModelを継承した Model 名クラスが記載されたModel名.phpが作成されます。

 

[PR] PHPプログラミングで挫折しない学習方法を動画で公開中

実際にmodelでdatabaseを操作してみよう

まずはPostモデルと対応するテーブルを作成しましょう。以下のコマンドでモデルとマイグレーションのファイルを一挙に作成することができます。

php artisan make:model Post —migration

ファイルが作成されたのでマイグレーションの中身を記述していきます。カラム、title:文字列、body:テキストを追記しましょう。

<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

マイグレーションを実行しましょう。php artisan migrate コマンドを実行してください。次にモデルの中身を書いていきます。

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    protected $fillable = ['title', 'body'];
}

fillableまたはguardedというフィールドをどちらか1つ書くといいでしょう。うっかり変更してはいけないデータを変更してしまうことを防いでくれます。

準備が整いましたので早速、BookでCRUD操作でもしてみましょう!対話環境を起動します。

artisan tinker 
>>> use AppPost;
>>> Post::all()
=> IlluminateDatabaseEloquentCollection {#2851
     all: [],
   }
// all メソッドは posts テーブルから全てのデータを一覧で (コレクションとして) 取得します。作成したばかりなので中身は空です。
>>> Post::create(['title' => 'mvc の model とは?', 'body' => 'そもそも ...'])
=> AppPost {#2841
     title: ""mvc の model とは?"",
     body: ""そもそも ..."",
     updated_at: ""2018-07-23 13:21:25"",
     created_at: ""2018-07-23 13:21:25"",
     id: 1,
   }
// create メソッドを使って、タイトルが ”mvc の model とは?”、本文が ""そもそも ...""  というデータが id 1 のレコードとして作成されました
>>> Post::find(1)
=> AppPost {#2844
     id: 1,
     title: ""mvc の model とは?"",
     body: ""そもそも ..."",
     created_at: ""2018-07-23 13:21:25"",
     updated_at: ""2018-07-23 13:21:25"",
   }
// find メソッドを使って id によるレコードの取得が行えます、先ほど作成したレコードを取得して $myPost という変数に代入しました。
>>> $post->update(['title' => 'mvc の controller とは?'])
=> true
// update メソッドを呼んでタイトルを変更しました。変更が成功した事が戻り値 true として返ってきています。
>>> $post->delete();
=> true
// delete メソッドを使ってモデルを削除しました。
// 削除は Post::destroy(1) を使っても行えます。
// この場合、モデルを取得せずに削除が行えます。
>>> Post::all()
=> IlluminateDatabaseEloquentCollection {#2856
     all: [],
   }
// 削除したので空になりました!

以上、これが基本的な操作になります。

まだまだ紹介しきれないほどモデルには様々な機能が提供されています (条件検索や、テーブルとの関連などなど便利な機能がたくさん)。ぜひ一度ドキュメントに目を通してみてください。

この記事を監修してくれた方

鵜澤峻平(うさわしゅんぺい)

普現在はフリーランスのエンジニアをしていてプログラミング歴は5年目になります。普段はRails、Laravel、Node.js等を使って Web、モバイルアプリケーションを作成しています。開発実績としては、いくつかのWebサービス、コンシューマー向けモバイルアプリケーション、NPOサイトリニューアル、ロボット用プログラムなどがあります。

TechAcademyでメンターをはじめたのは、「プログラミングでやりたいことがある人を応援したい」、「講師と受講者が話し合って学び方を決めていく」に惹かれたからです。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する