オーダーメイドコース
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 を管理する責任を持っています。

となります。

 

modelの命名規則と作成方法

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

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

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

php artisan make:model Model名

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

 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

実際に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講座を開催しています。

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