LoginSignup
32
40

More than 3 years have passed since last update.

【Laravel】Laravelデータベースの基本!

Last updated at Posted at 2019-07-04

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を用いてデータベースを作成していました。

個人的に苦しんだエラー特集

以下の記事を参考にして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)のユーザーネーム、パスワード、サーバ名、全て同じものを使用してログインを試みたのに何度試しても失敗。
もう一度コンテナを作り直したら解決した。原因不明🤣
このエラー解消に恐ろしく時間取られたのが本当に悔しい...!

参考

※ この備忘録目的の記事です

32
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
40