LoginSignup
2
4

More than 3 years have passed since last update.

Laravel 6.x データベース操作の種類 DBクラス・クエリビルダ・Eloquent ORM

Posted at

作業環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code

はじめに

この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

Laravelを学習している中で、データベースの操作の違いがわからなくなってきたので、まとめる為に書いてます。

操作の種類

Laravelでのデータベースの操作には、大きく分けて3つの方法がある。

①DBクラスによる操作
②クエリビルダによる操作
③Modelクラス(Eloquent ORM)による操作

それぞれの違い

項目 DBクラス クエリビルダ Eloquent ORM
Modelが必要 × ×
クエリビルダが使える ×
SQLインジェクション対策有り × ○※Row使用時は対策が必要 ○※Row使用時は対策が必要
テーブルのタイムスタンプ更新 × ×

DBクラスもクエリビルダもIlluminate\Support\Facades\DBクラス(ファサード)による記述方法ですが、ModelクラスはIlluminate\Database\Eloquent\Modelクラスを継承するため仕組みが異なる。

DBクラス

DB::SQL(SQL文、パラメータ配列)で記述する方法でデーターべースを操作します。

SQL文をそのまま使用するイメージで記述できるため、SQLを理解している人にはわかりやす記述方法。

クエリビルダ

DB::table('テーブル名')->DBメソッド のように記述して操作します。

SQL文を生成するためのメソッドを、メソッドチェーンで記述することによりデーターベースを操作する。
ほぼSQL文と同じように記述できる。
SQLインジェクション対策有り。

モデルクラス(Eloquent ORM)

モデルクラスでは クラス名::メソッド() のように記述してクリエビルダでデータベースを操作します。

Eloquentを使用したデータベースの操作です。
SQLインジェクション対策有り。
Modelを使用する為、テーブルのタイムスタンプの更新が自動で行われる。
テーブルのcreated_at updated_atを更新できる。

記述の違い

ここではデータベース上のusersテーブルから、全値を取得し$usersに代入するまでの記述の違いを比較します。

DBクラス

use Illuminate\Support\Facades\DB;

$users = DB::select('SELECT * FROM users');

クエリビルダ

use Illuminate\Support\Facades\DB;

$users = DB::table('users')->get();

モデルクラス(Eloquent ORM)

use App\Models\User;

$users = User::all();
2
4
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
2
4