作業環境
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();