Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Laravel】Modelからデータベースにアクセスしたい!

PHPバージョン:7.1.14
Laravelバージョン:5.7.9

今回はMVCのモデルについてです!
MVCのCであるControllerの記事はこちら
MVCのVであるViewの記事はこちら

前回まででDBのテーブル作成(Migration)とデータ登録(Seeding)を行いました!
またArticleのControllerとViewも作成しました!
というわけで今回は、モデルからデータベースにアクセスしたいと思います!


モデルを作成する

まずはartisanコマンドでArticleという名前のモデルを作成します!

$ php artisan make:model Models/Article
Model created successfully.

こちらのコマンドでモデルを作成することができます。
Modelsの部分はディレクトリを表しています。
Laravelはデフォルトではモデル用のディレクトリは用意しておりません。
(モデルの定義がユーザーによって大きく違うため作成箇所はユーザーに委ねている。)

さてそれではArticleモデルを確認してみましょう!

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    //
}

app>Models>Article.php

Modelクラスを継承したArticleという名前のクラスのみで、シンプルです。
モデル名はデータベーステーブルの単数形にすると、
Laravelが自動的に判定してDBとModelを繋ぎます。
("articles"テーブルなら"Article"モデル)

もしくは"$table"変数にデータベーステーブル名を指定すると、
ModelとDBを繋げることができます。
Articleクラスが継承しているModelクラスの変数を
オーバーライドする形となります。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $table = 'special_articles';
}

上のようにすると、
DB内にある'special_articles'テーブルとArticleモデルが繋がります。

以上でModelを利用してデータベースにアクセスすることができます。

ArticleControllerを編集

続いて以前作成したEventControllerを編集します!

<?php

namespace App\Http\Controllers;
// ***** 開始 *****
use App\Models\Article;
// ***** 終了 *****
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    function show() {
// ***** 開始 *****
        $articles = Article::all();
        return view('article.show', ['articles' => $articles]);
// ***** 終了 *****
    }
}

app>Http>Controllers>ArticleController.php

まずはuse宣言に先ほど作成したArticleモデルのパスを記述します。
これを忘れるとController内でArticleモデルを使うことができません。

続いてshowメソッドです。
Articleモデルの静的メソッドとして、allメソッドを使っています。
allメソッドはarticlesテーブルに登録されている全レコードを取得します。

Article::allメソッドはLaravelのEloquentという機能の中に用意されています。
Eloquentのおかげで、バックグラウンドをきにすることなく
静的メソッドのように使うことが出来ます。
Eloquentについては別記事でご紹介する予定です。

最後にviewメソッドです。
第一引数に'article.show'と書かれているのはディレクトリ構成を表しています。
resources>view以下にarticleディレクトリを作成し、
その下にshow.blade.phpファイルを作成しましょう。

f:id:hiyotama:20181106120335p:plain

第2引数には取得したarticlesデータを配列に渡します。

Viewを編集

続いてViewを編集します!

<!doctype html>
<html>
<head>
    <title>Article/Show</title>
</head>
<body>
<h1>Article/Show</h1>
@foreach($articles as $a)
    <p>{{$a->title}} : {{$a->body}}</p>
@endforeach
</body>
</html>

resources>views>article>show.blade.php

渡されたarticles配列データを@foreachで取り出しています。
Laravelのbladeはこのようにforeach文などphpの機能を簡潔に記述することができます。

routeを編集

最後にrouteであるweb.phpファイルを編集して終了です!

<?php

Route::get('/', function () {
    return view('welcome');
});
// ***** 開始 *****
Route::get('article/show', 'ArticleController@show');
// ***** 終了 *****

routes>web.php

f:id:hiyotama:20181106195205p:plain

MigrationとSeedingによってMySQLに登録したデータをModelで取り出し、
Viewで表示することに成功しました!

本日はここまでです、ありがとうございました〜