#Laravelでデータベースを使うなら
Laravelでデータベースを使うなら、DBクラスかEloquentのどちらかを使います。
####DBクラス
データベースアクセスのための基本的な機能をまとめたクラス。クエリビルだという機能も用意されている。
####Eloquent
ORMを実装したもの。
ORMの説明(Wikipediaより引用)
データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。オブジェクト関連マッピングとも呼ぶ。
###前提知識 CRUD
データベース操作の基本はCRUD(Create,Read,Update,Delete)の実装です。
SQLでは(INSERT,SELECT,UPDATE,DELETE)が対応する。
#1.DBクラス
###必要な手続き
####データベースを設定する
config/database.phpの冒頭にある'default'の第二引数を使用したいデータベース名に設定すればOK。sqliteならsqlite、MySQLならmysql。
'default' => env('DB_CONNECTION', データベース名),
####環境変数を設定する
.envファイルに環境変数がまとめられているので、この中のDB_CONNECTIONとDB_DATABASEを編集する。
DB_CONNECTION=データベース名
DB_DATABASE=使用するデータベースファイルのパスを指定
####コントローラの修正
DB:selectで指定したSQL文を実行し、データベースからレコードの情報を取り出します。
use Illuminate\Support\Facades\DB;
$変数 = DB::select(実行するSQL文);
#####DBクラス内でのCRUD
冒頭でCRUDについて述べたと思うのですが、DBクラスでは以下の静的なメソッドを用います。
CRUD | メソッド |
---|---|
C | DB::insert(クエリ文,パラメータ配列); |
R | DB::select(実行するSQL文); |
U | DB::update(クエリ文,パラメータ配列); |
D | DB::delete(クエリ文,パラメータ配列); |
####テンプレートの修正
@foreachディレクティブなどを使用してデータを活用します。
ディレクティブに関しては以下の記事に記載してあります。
##クエリビルダ
LaravelのDBクラスにはクエリビルダという機能が用意されています。
クエリビルダ=SQLのクエリ文を生成するために用意されたメソッド
#2.Eloquent
###必要な手続き
####データベースを設定する
config/database.phpの冒頭にある'default'の第二引数を使用したいデータベース名に設定すればOK。sqliteならsqlite、MySQLならmysql。
'default' => env('DB_CONNECTION', データベース名),
####環境変数を設定する
.envファイルに環境変数がまとめられているので、この中のDB_CONNECTIONとDB_DATABASEを編集する。
DB_CONNECTION=データベース名
DB_DATABASE=使用するデータベースファイルのパスを指定
####モデルの作成
artisanコマンドでモデルを作成します。作成されたモデルはappフォルダに配置されます。
php artisan make:model モデル名
クラスの中身は何も書いなくても、継承元である Model クラスで様々な設定を読み取ってくれます。
例えばこのモデルクラスがどのテーブルに対応しているかはクラス名から自動的に推定されます。つまりモデルクラスのクラス名の複数形のテーブルが対応していると解釈されるのです。デフォルトの推定に当てはまらない場合は追加で設定を書きます。
####コントローラに以下追加
use App\モデル名;
$変数 = Folder::all();
#便利なツール
シーディングとマイグレーションはどちらの手法でも使える便利なものです。
##シーディング
シード=最初から用意しておくコード
シーディングとはシードを作成する機能のこと。
初期状態でダミーのデータがあると便利。
#####シーダーファイルの作成
artisanコマンドでシーダーファイルを作成します。作成されたシーダーファイルはdatabase/seedsフォルダの中に配置されます。
php artisan make:seeder シーダー名
このファイルのrunメソッドにシーディング処理を記入します。
#####シーディングの登録
このシーダーファイルをdatabase/seeds/DatabaseSeeder.phpに登録します。
runメソッドに以下のように記入してください。
$this->call(シーダークラス::class);
#####シーディングの実行
以下のコマンドを使用してシーディングを実行します。
php artisan db:seed
##マイグレーション
現在使っているデータベースと全く同じ構造を再現するための仕組みのこと。データベースの移行したり、環境を移行したりする際に一からデータベースを作り直しのは大変。データベースを効率よく管理したいなら、マイグレーションを利用するべき!
#####マイグレーションファイルの生成
以下のコマンドを実行してマイグレーションファイルを作成します。
php artisan make:migration ファイル名
database/migrationsの中に生成したマイグレーションが追加されます。
生成したファイルの中にはMigrationを継承したクラスが作成されています。このクラスにつのメソッドが用意されています。
- upメソッド(テーブルを生成するための処理)
- downメソッド(テーブルを消去するための処理)
それぞれ必要な処理を記述します。
######主要な型の設定
説明 | コマンド |
---|---|
プライマリキー | $table->increments(フィールド名); |
整数 | $table->integer(フィールド名); |
実数 | $table->float(フィールド名); |
文字 | $table->String(フィールド名); |
真偽値 | $table->boolean(フィールド名); |
日時 | $table->dateTime(フィールド名); |
NULL値可能なcreated_atとupdated_atカラム追加 | $table->timestamps(); |
#####マイグレーションの実行
以下のコマンドを実行してマイグレーションを実行する。
php artisan migrate
コンソールにメッセージが出力され、テーブルが用意される。
##多くのチュートリアルでは・・・
以下のチュートリアルでは、マイグレーションを作成しEloquentを用いてデータベースを作成していました。
- 【Laravel 5.7対応】掲示板を作成するチュートリアル
- Laravel5.4でシンプルなCMSを作るチュートリアル
- Laravel 5.5 入門として「基本のタスクリスト」を作成する [その1]
- 入門Laravelチュートリアル (3) ToDoアプリのフォルダ一覧表示機能を作る
##個人的に苦しんだエラー特集
以下の記事を参考にしてDockerの環境を構築しました。
目的が果たせればOKと判断して雰囲気でDocker使ってたので、今回苦労しました(・・;) 夏休みあたりにちゃんとDocker勉強します😢
###Dockerでマイグレーションが作成できない
.envのDB_HOST
をデフォルト設定から変更する必要がある。docker-compose.ymlでserviceとして定義した名前を使用する。
###docker-compose up できない
以下のエラーが出てコンテナを起動できなかった。
ERROR: Encountered errors while bringing up the project.
DockerをQuitしてもう一度するとできた。
###phpMyAdminにログインできない
環境変数内(.env)のユーザーネーム、パスワード、サーバ名、全て同じものを使用してログインを試みたのに何度試しても失敗。
もう一度コンテナを作り直したら解決した。原因不明🤣
このエラー解消に恐ろしく時間取られたのが本当に悔しい...!
##参考
- CRUDとは?データベースの基本的な処理
- Laravelのクエリビルダ記法まとめ(QueryBuilder/DB Facade)
- Laravel学習帳
- Docker上のLaravelでDBをmigrateしたらエラー(could not connect to server: Connection refused)になった話
- Laravelの環境をDockerで構築するチュートリアル
※ この備忘録目的の記事です