MENU

【Laravel8】 DBのデータをセレクトしてブラウザで表示させる方法を解説 

Laravel8講座

今回はLaravelでDBの中のデータを抽出する方法をみていきます。

LaravelのPJ作成してから、
DBのデータを抽出し画面に出力するところまで、
サンプルをもとに説明していきます。

参考記事
LaravelでのSQLの書き方

テーブルのデータは前回のデータ抽出の時と同様です。

目次

サンプルデータ

使用データ

LaravelPJ作成

すでにPJ作成している人はスキップしてください!
他の箇所もすでに設定済みの場合はスキップしてください。

##Laravelのインストーラーの更新の有無を確認
composer global require laravel/installer
##composerのパスを通す
#export PATH=$HOME/.composer/vendor/bin:$PATH
source ~/.bashrc 
#laravel PJ作成(laravel8の最新バージョンが読み込まれる)
 laravel new select_sample

DBの接続設定を開発環境に合わせて変更


.envを変更
参考 DB設定方法

#11行目から16行目を書き換え
vi .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=select_sample
DB_USERNAME=root
DB_PASSWORD=

ルーティング設定

次にルーティングの設定を入れる。
ブラウザで出力した方がみやすくて好きなのでブラウザで見れるようにします。

変更ファイル routes/web.php
4行目あたりにコントローラーを読み込む設定を追加

use App\Http\Controllers\IndexController;

既存のルーティング設定を消して以下を追記
http://127.0.0.1:8000/ に来たアクセスをindexControllerのindex functionに流すという意味

Route::get('/', [IndexController::class, 'index']);

コントローラー作成

DBへの処理を記述するコントローラー(IndexController)作成


このコマンドをPJフォルダー直下で実行
php artisan make:controller IndexController

コマンドが成功すればここにファイルが作成される
app/Http/Controllers/IndexController.php

Eloquent Modelを使わない方法

テーブルごとにModelを作成する方法もあるが、
今回はModelを作成せずにDBの中身を呼び出す方法を書きます。

IndexController.phpを修正

6行目位にDB設定を使う設定を追加

use Illuminate\Support\Facades\DB;

index関数を作成しこんな感じでtestsテーブルの中身を追加

public function index(){
    var_dump(DB::table('tests')->get());

}

http://127.0.0.1:8000/にアクセス

見た目はともかくDBのデータっぽいのが表示されていればOK。
無事DBの中身が出力されたようです。

※ちなみにないと思いますが何万件もあるデータを出力すると重くて色々トラブルので、
件数が多い場合は出力件数を絞るか、
データ件数の少ないテーブルで試してください。

Eloquent Modelを使う方法

PJ直下で以下コマンドを実行しModelの生成

php artisan make:model Test

IndexControllerは以下のように修正

6行目に先ほど生成したクラスファイルを読み込む
11行目のように記述してテーブルの中身を取り出す

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Test;

class IndexController extends Controller
{
    public function index(){
       var_dump(Test::select()->get());

    }
}
?>

テーブルのデータの値をとる

上のはただテーブルの中身をdumpしたものなのでこれじゃあ使えないって感じだと思うので、
テーブルの値をとってくる方法を説明します。

こんな感じでforeachを使えば簡単にテーブルのデータの値をとってこれます

public function index(){
    $Tests = DB::table('tests')->get();

    foreach($Tests as $Test) {
        echo $Test->username . "<br>";
    }

}
ブラウザにアクセス

DBの値をView側で扱う

では最後にDBの値をビューで表示させる方法を
DBの値を整形してユーザーに見せる時に便利です。

まずコントローラー側に手を加えます。

テーブルの中身をとってきて変数に入れます。
DBからとってきたデータをそのままviewに送ります。

viewへの渡し方はこんな感じで遷移先のviewテンプレートとデータを指定します。

return view(‘第1引数=どのテンプレートを読むか’,第2引数=渡すデータ);

こんな感じで指定した場合は
return view(‘test’,compact(‘tests’));
resources/views/test.blade.php が呼ばれることになります。
ファイルがないと当然エラーになりますので先に作成してください。

コントローラーのコード app/Http/Controllers/IndexController.php

class IndexController extends Controller
{
public function index(){
$tests = DB::table('tests')->get();    
return view('test',compact('tests'));

}}

viewを作成

配列を扱うのはviewでもforeachが便利です。
こんな感じで書けば

<table border="1">
        <tr>
            <th>ID</th>
            <th>名前</th>
            <th>年齢</th>
            <th>給与</th>
            <th>作成日時</th>
            <th>更新日時</th>
        </tr>
        @foreach($tests as $recode)
            <tr>
                <th>{{$recode->id}}</th>
                <th>{{$recode->username}}</th>
                <th>{{$recode->age}}</th>
                <th>{{$recode->salary}}</th>
                <th>{{$recode->created_at}}</th>
                <th>{{$recode->updated_at}}</th>
            </tr>
        @endforeach
</table>

編集したファイルを保存して再度
http://127.0.0.1:8000/ にアクセス

意外と簡単。
上手くいきましたか!?
上手くいかない原因はタイプミスが大半だと思うのでよく見返してみてください!!

参考記事

[Laravel8] Migrationツールを使ってテーブル作成した話
【Laravel8】DBからデータ取得方法解説- (初級レベルからOK)
よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

目次
閉じる