DBへ接続
あらゆるシステムにおいて、画面に入力したデータをDBへ追加したり、DBから必要なデータを取得して画面に表示したりと、DBは欠かせない存在です。システム開発の際は、システムを構築するプログラミング言語(PHP等)を用いてDB(MySQL等)へ接続します。
MVCモデルで開発を行う際に、Modelの部分でDBを操作しています。ModelでDBから値を受け取り、Controllerを経由して画面へ送られます。
※MVCモデルは以下記事で解説しています。
MVCモデルとは?フレームワークを使う前に知っておきたい!
フレームワークには、DBを扱うためのクラスや設定が用意されており、誰でも簡単にDBへ接続して、操作を行えます。
今回は、LaravelでローカルのDB(MySQL)を扱う方法を紹介します。
DB接続
DB接続するためには、主に「ホスト、ポート、DB名、ユーザ名、パスワード」が必要になります。Laravelは、これらの設定を「.env」というファイルの中に環境変数として記載してあります。この環境変数の中身を自分の接続したいDBの情報に書き換えます。
環境変数 | 概要 |
DB_CONNECTION | データベースの種類 |
DB_HOST | 接続先のホスト |
DB_PORT | 接続先のポート |
DB_DATABASE | データベース名 |
DB_USERNAME | ユーザー名 |
DB_PASSWORD | パスワード |
ローカルのDB(MySQL)へ接続する場合は、基本的に設定を変えなくて大丈夫です。
データベース名とパスワード(設定していれば)を変更するだけで、「.env」の設定は完了です。
sampleというデータベースへ接続したい場合は以下になります。(パスワードは未設定)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=sample DB_USERNAME=root DB_PASSWORD=
今回は、sampleというデータベースを作成し、usersというテーブルを作成してください。
usersテーブルの中身は何でも良いですが、idのカラムは作成してください。
適当にデータを入れておくと、この記事をスムーズに読むことが出来ます。
Modelの作成
DB接続の準備が出来たら、Modelを作成します。Laravelの場合、Modelのクラス名をDBのテーブル名の単数形に指定することで、勝手に紐付けてくれます。
Laravelは、以下の様にコマンドでModelのファイルを自動で作成してくれます。
以下コマンドで、usersテーブルに紐づいた、Userモデルを作成します。
php artisan make:model User
User.phpというファイルがapp配下に作られます。
「app/Models」配下に作りたい場合は、以下の様に指定すればModelsフォルダが作られます。
php artisan make:model Models/User
User.phpは以下の様な内容で自動作成されます。
<User.php>
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { // }
Modelの使用
ControllerでModelを呼び出して使用します。
以下記事で作成した、TestControllerを少し書き換えてみます。
Laravelでコントローラーからviewへデータを送る
Modelに限らず、別クラスを使う為には、useを使ってクラスを読み込む必要があります。
use App\Models\User;
クラスを読み込んだら、インスタンス化を行います。
$user = new User;
LaravelのModelには、様々な関数が用意されており、今回使っているfindは、idを指定してデータを取得する関数になります。
$value = $user->find(1);
SQLで表すと、以下になります。
SELECT * FROM users WHERE id = 1
この様に、SQL文を直接書かなくても、データベースの操作を行える機能をクエリビルダと呼びます。
<TestController.php>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class TestController extends Controller
{
public function func() {
$user = new User;
$value = $user->find(1);
$arr = ['Snome1', 'Snome2', 'Snome3'];
return view('sample', compact('value', 'arr'));
}
}
取得データの使用
取得したデータは連想配列で変数に入っていると考えてください。
キーにカラム名を指定することで、そのカラムの値を取り出すことが出来ます。
今回は、idを取得する為に、idをキーとして指定します。
<html> <head> <title>HelloWorld</title> </head> <body> <h1>HelloWorld!</h1> <a>{{ $value['id'] }}</a> <h1>{{ $arr[0] }}</h1> <h2>{{ $arr[1] }}</h2> <h3>{{ $arr[2] }}</h3> </body> </html>
<実行結果>
findの引数を2に変えると、$value[‘id’]の中身も2になります。
※もちろんデータがusersテーブルに入っている前提です。データが無ければエラーになるか、何も表示されません。
まとめ
Laravelを使って、データベースへ接続し、データを取得してみました。
この様に、クエリビルダを使えば、SQL文を書かなくてもDBを操作出来ますが、SQLに不安がある人にはオススメは出来ません。
他のフレームワークになると、書き方も変わってくる上に、SQLが書けないと応用が利きません。
まずは、SQLの勉強を行なってから、クエリビルダを触ってみてください。