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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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

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

 

なお本記事は、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 ディレクトリ以下にIlluminate\Database\Eloquent\Modelを継承した Model 名クラスが記載されたModel名.phpが作成されます。

 

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

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

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

php artisan make:model Post —migration

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

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

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 Illuminate\Database\Eloquent\Model;

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

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

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

artisan tinker 
>>> use App\Post;
>>> Post::all()
=> Illuminate\Database\Eloquent\Collection {#2851
     all: [],
   }
// all メソッドは posts テーブルから全てのデータを一覧で (コレクションとして) 取得します。作成したばかりなので中身は空です。
>>> Post::create(['title' => 'mvc の model とは?', 'body' => 'そもそも ...'])
=> App\Post {#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)
=> App\Post {#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()
=> Illuminate\Database\Eloquent\Collection {#2856
     all: [],
   }
// 削除したので空になりました!

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

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

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

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

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

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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。