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年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 172

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

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

トップに戻る