Laravel MySQL 接続 設定 SQLクエリ クエリビルダ

今回は、LaravelでMySQLを利用するための設定や、実装方法をメモしたいと思います。

※ORMの内容は含まれていません。

 

Laravelプロジェクトは、以下の要領で作成済みの前提でメモさせて頂きます。

Laravel インストール HelloWorld

Laravel 画面遷移 実装 サンプル

 

Laravelプロジェクト作成

 

 

 参考

・Laravel 7.x データベース:利用開始

https://readouble.com/laravel/7.x/ja/database.html

 


database.php デフォルト データベース設定

/プロジェクトフォルダ/config/database.phpに、データベースに関する設定が記述されています。

まずは、defaultがMySQLになっていることを確認します。

※他のDBを利用する場合には、こちらの指定を変更する必要があります。

Laravel database.php

 


database.php MySQL設定

次に、mysqlの接続情報を指定します。

‘mysql’ => の内容が接続情報の指定になります。

以下の記事の通りMANPにてMySQLを整備した場合、

mac MAMP インストール PHP HelloWorld

最低限以下を設定することで接続可能になりました。

  • DB_HOST
  • DB_PORT
  • DB_DATABASE
  • DB_USERNAME
  • DB_PASSWORD

Laravel database.php

workbench settings

 


.env データベース設定

database.php以外にも、/プロジェクトフォルダ/.envというファイルに、

設定箇所がありますので、そちらも修正を行います。

Laravel env


テンプレート作成

設定系の作業が済んだら実装に移ります。まず、テンプレートを作成します。

データを抽出できていることを確認したいので、テーブルタグで表示します。

showUser.blade.php

<html>
  <head>
    <title>ユーザーデータ</title>
    <style type="text/css">
      th { background-color:blue; color:fff; padding:2px 10px;}
      td { border:solid 2px; color:999; padding:2px 10px;}
    </style>
  </head>
  <body>
    <div>UserData</div>
    <table>
      <tr>
        <th>id</th>
        <th>name</th>
      </tr>
      @foreach($user_data as $user)
      <tr>
        <td>{{$user->id}}</td>
        <td>{{$user->name}}</td>
      </tr>
      @endforeach
    </table>
  </body>
</html>

 

LaravelBlade

 


コントローラー作成

テンプレートを表示させるためのコントローラーを実装します。

DBクラスを利用してSELECT文を実行します。

・SQLクエリ 実装

SQL平文で実装する場合、以下の様に指定します。

> DB::select(“SQL文字列”);
Laravel Controller Class
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class dbTestController extends Controller
{
    public function selectUserData(Request $request)
    {
        if ($request->id > 0) {
            $user_data = DB::select('SELECT * FROM user WHERE id='.$request->id);
        } else {
            $user_data = DB::select('SELECT * FROM user');
        }
        $data = [
            'id'=> $request->id,
            'user_data'=> $user_data,
        ];

        return view('dbTest.showUser', $data);
    }
}

 

・クエリビルダ 実装

クエリビルダで実装する場合、以下の様に指定します。
> DB::table(‘テーブル名’)->get();
> DB::table(‘テーブル名’)->where(‘DBカラム名’, ‘式’, 値)->get();
※第2引数(‘式’)は、省略可能です。
Laravel Controller Class
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class dbTestController extends Controller
{
    public function selectUserData(Request $request)
    {
        if ($request->id > 0) {
            $user_data = DB::table('user')->where('id', $request->id)->get();
        } else {
            $user_data = DB::table('user')->get();
        }
        $data = [
            'id'=> $request->id,
            'user_data'=> $user_data,
        ];

        return view('dbTest.showUser', $data);
    }
}
尚、DBクラスを利用するには、以下の要領でDBクラスの名前空間をインポートする必要があります。
use Illuminate\Support\Facades\DB;

 

また、今回のサンプルでは、URLにデータのidを含めて受け取れる様にして、
idがURLに含まれていたら、指定したidのレコードのみ表示、
idがURLに含まれていなかったら、全レコード表示という仕様で実装しました。

ルーティング設定

最後に、URLの割当を実装します。

コントローラーの部分で触れました通り、

idをURLパラーメータに含めてコントローラーに渡したいので、

dbTest/{id?}という形式にすることで、任意のパラメータ(id)を指定できる様に実装します。

※パラメータを必須にする場合?を除いたdbTest/{id}という形式で指定します。

Laravel ルーティング

 


挙動確認

簡易ビルトインサーバーを立ち上げるなどして、挙動確認を行います。

php artisan serve

Laravel ビルトインサーバー

まずは、idをURLパラメータに指定せずに、ブラウザで確認します。

Laravel ビルトインサーバー GET リクエスト

次に、idを指定して確認します。

Laravel ビルトインサーバー GET リクエスト

 


 

今回のメモ内容は以上となります。

DBクラスを利用すれば、SQLクエリ・ビルドクエリのどちらでも実装できます。

細かなDBアクセス方法を実装したい場合には、ORMを利用した方が良さそうですが、

簡単なDBアクセスのみであれば、DBクラスで事足りると思います。


------------------------------------------ スポンサーリンク ------------------------------------------
都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 138

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る