PHP

【Laravel】ViewsにDBのテーブルからデータを取得する一連の流れ

【Laravel】ViewsにDBのテーブルからデータを取得する一連の流れ

 

誠太
こんにちは、誠太です。

 

今回は、このような悩みを持っている方に向けた記事になっています。

 

Laravelを導入してモデルを使うタイミングになったんだけど、どのようにしてviewにデータベースのデータを表示したらいいのかわからない。

 

Laravelを使用してViewにデータを表示させるのは必須の処理になってきますよね。

 

だけど、エラーを吐き出してうまく行かないという場合には、気持ちが萎えてしまいます。

 

恐らく本記事でお伝えする方法を使用していただければ、確実にviewにDBのテーブルデータを表示できるようになると思いますので、試してみていただけると幸いです。

 

【Laravel】ViewsにDBのテーブルからデータを取得する一連の流れ

【Laravel】ViewsにDBのテーブルからデータを取得する一連の流れ

 

viewにDBのテーブルデータを表示させる手順はこちら。

 

  • Modelを作成する
  • Controllerにデータベースのテーブル指定処理を書く
  • Viewに人のデータを表示する処理を書く

 

なお、本記事で紹介する方法はコマンドは使用せずにMySQLを使用して、マイグレーションファイル等は使用しない方法になりますので、かなり簡易的に実装できる方法になります。

 

Modelを作成する

それでは早速、Model部分を作成していきましょう。

 

Modelで使用するコード

<?php

namespace App\Models;

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;

class Sample extends Model
{
	protected $table = 'Sample';

	protected $guarded = array('id');

	public $timestamps = false;

	public function getData() {
		$data = DB::table($this->table)->get();

		return $data;
	}
}

 

Modelで使用する文章は上記のようなコードになります。

 

ワンブロックずつ解説していきます。

 

namespace App\Models;

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;

 

namespaceはどの部分にこのModelを書いたphpファイルがあるかを指定。

 

今回は、App直下にModelsというフォルダを作成して、その中にSample.phpというモデルを作成したので『namespace App\Models』となっています。

※namespaceの部分はパスしていをバックスラッシュを指定することになるので、注意しましょう。

 

『use Illuminate\Database\Eloquent\Model;』はモデルを作成した場合に自動的に生成されていると思うので、解説は省きますが、問題はこちらの『use Illuminate\Support\Facades\DB;』です。

 

これは、何かのパスをしていして使っているんだろうなーくらいは理解できますよね。

 

役割としては、意味合いはSQL文の『select、update、insert、delete、statement』を使用するための文とおぼえておけば大丈夫でしょう。

 

テーブル内のデータを指定する際になどに使用されるため、ほぼほぼ使用することになると思います。

 

class Sample extends Model
{
	protected $table = 'sample';

	protected $guarded = array('id');

	public $timestamps = false;

	public function getData() {
		$data = DB::table($this->table)->get();

		return $data;
	}
}

 

それでは、次にModelクラス内の処理について書いていきます。

 

『class Sample extends Model』の部分はSampleの部分にSample.phpのSampleを記述してモデルのphpファイル名と一致させればOKです。

 

『protected $table = 'sample'; ~ public $timestamps = false;』までは、最初のprotected $tableで使用したいテーブル名を指定します。

 

『protected $guarded = array('id'); 』は主キーの指定になりますが、指定のない場合はLaravelの使用上自動的にid指定となるようです。とりあえず、記述しておきます。

 

『public $timestamps = false;』はタイムスタンプの更新をするかしないかの部分になり、作成日時・更新日時のデータ更新をするかどうかを決めるところになるので、ブログの記事や掲示板なんかを作成する際にはtrueにする必要があるでしょう。

 

『public function getData() ~』の部分は、$dataにDBファサード(DB::)を使用して指定したテーブルのデータを全取得しています。

 

最後に『return $data;』で取得したテーブルデータを返しているという感じになっています。

 

今回こちらの実装をするのに、RitoLaboさんの記事を参考に助けられた部分が多いので、合わせて参考にしていただくと更に知識が深まるでしょう。

 

Contollerにデータベースのテーブル指定処理を書く

次にコントローラのファイルを作成していきます。

大体ここまでで、Laravelでデータベースのデータを読み込ませるための下準備が完了したといった段階です。

 

<?php

namespace App\Http\Controllers;

use App\Models\Sample;

class SampleModelController extends Controller
{
	public function index() {
		$md = new Sample();
		$data = $md->getData();
		return view('index',['data' => $data]);
	}
}

 

前回のModelと同様に解説していきます。

 

『namespace App\Http\Controllers;』はコントローラ作成時に自動生成されると思いますので、割愛させていただきます。

 

『use App\Models\Sample;』はSample.phpがあるディレクトリを指定しなければいけません。

 

『class SampleModelController extends Controller ~』は、コントローラを作成した際に自動的に生成されると思いますが、今書いているコントローラの名称と同じになっているか確認してみてください。

 

『public function index() ~』は、変数md($md)にSampleモデルをインスタンス化させるために、new Sample()を記述。

 

『$data = $md->getData();』で更に変数data($data)に$mdの中にあるgetData関数を使用するという意味を代入します。

 

『return view('index',['data' => $data]);』では、通常viewを表示するための『return view('index');』に『['data'=>$data]』を追加して、index.blade.phpでSample.phpから取得したテーブルデータを使用するというコードです。

 

web.phpでルーティングの設定はお忘れなく!

ここまでやっているとルーティングの設定を忘れてしまいそうになるので、念の為。

 

Route::get('/sample_model/', 'SampleModelController@index()');

 

通常viewを設定しているControllerと違うコントローラを使用しているので、別でコントローラ指定をしてルーティングを設定することを忘れないようにしましょう。

 

Viewに任意のデータを表示する

それでは、いよいよ後半戦のviewにテーブルデータを表示させるための方法です。

 

//上下部関係のないコードのため省略
<div class="col-sm-10">
 @foreach ($data as $tdata)	
  <p class="form-control-plaintext">{{ $tdata->name_code}}</p>
 @endforeach

 

データベースのテーブルデータを表示させる部分以外のコードは不要なので、必要な部分のみピンポイントで抽出して解説します。

 

データベースのテーブルデータを挿入したい部分を@foreachディレクティブを使用して囲みます(<? php foreach (key as value)に当たる部分です)。

 

keyに当たる部分に$dataを記述して、valueの部分は任意の変数でOKです。

 

そしてデータを挿入したい部分を、『{{ $tdata->name_code}}』と書くことでデータベースの中のSampleテーブルにある、name_codeというカラムのデータが埋め込め完了です。

 

Sampleテーブルの中のname_codeカラムが複数あった場合は、データがなくなるまで繰り返し処理されるため、<p>タグで一番上のデータから順番に抽出されるようになります。

 

今回のデータ取得方法は少しイレギュラーかも

今回のデータ取得方法は少しイレギュラーかも

 

今回の状況としては、こちらになります。

 

  • 既にデータベースを作成している
  • テーブルデータを作成している
  • CUIを使用せず、phpmyadminでMySQLを操作する
  • .envファイルでMySQLのアカウントを設定済み

 

既にある程度下準備のデータが備わっている状況でかつ、CUIを使用しないで実装しているのでphp artisan コマンドは使用せずに作成しています。

 

本番環境によっては、CUIコマンドを使用できない環境で開発をするレアなケースもあると思い本記事を執筆しました。

 

ニッチな記事でしたが、あなたが当たっている壁を越えるのお手伝いが出来たら幸いです。

 

オススメ記事【Udemyが強い!】Web制作を独学で学べる講座はひとつあれば事足りそう

オススメ記事プログラミングの本は学習に必要だけど、本だけではキツいというお話【体験談】

  • この記事を書いた人
  • 最新記事
誠太

誠太

理系の文系ブロガー。理系脳ではプログラミングを、文系脳ではブログの運営についてのHow toを話題にブログで紹介しています。年間で1,600万を売り上げた実績を元にマーケティングにも触れ、プログラミングの学習方法やブログでの稼ぎ方について情報発信中!

よく読まれている記事

1

  AFFINGER5を購入しようか迷っているけど、損をしない特典が付いているところから購入したい。実用特典ってどんな特典なの?   ご覧いただいてありがとうございます。 &nbs ...

2

スポンサーリンク   アフィリエイトに向いているASPってあるのかな?もし稼ぎやすいASPがあるなら登録したいんだけど、おすすめのASPってある?   こんな悩みに解決しようと思い ...

3

  誠太こんにちは、誠太です!   ブログを運営していると、自分の文章をもっと良くしたいと思ってしまうものではないでしょうか。   しかし、ただブログを書いているだけでは ...

4

  ブログのSEO対策はいろんな情報があって、何が正しい対策なのかわからない場合が多く困ってしまいませんか?   本記事では、今回紹介するSEO対策を行い上位表示を確認できたことを ...

5

  誠太こんにちは、誠太です!   はてなブログをお使いのあなたにお伝えしなければいけないことがあります。 はてなブログから『はてなブログPro』に移行するのはやめましょう。 &n ...

-PHP
-

Copyright© SEITALITY , 2019 All Rights Reserved.