🌓
LaravelのクエリビルダとEloquentって何?
LaravelのクエリビルダとEloquentって何者?
案件先の方から、DBからデータを取得したいけど冗長からEloquent使わないとダメって言われました。。。と嘆かれ、なぜEloquentを使用した方が良いか理解していなかったため、説明用で作成しました!
クエリビルダとは?
クエリビルダとは、DBからデータを取得する操作の1つです。SQLの知見が必要であるため、SQL構文を理解している方は馴染みやすいかと思います。
Eloquentとは?
クエリビルダ同様に、DBからデータを取得する操作の1つです。ただ、クエリビルダと違いSQL構文の理解がなくてもDB操作が可能です(多少は必要ですがね)。
LaravelのORMであり、二次元の表であるDBのレコードと、PHPのオブジェクトを対応させて、扱いやすくしています。
使用方法
大きな違いとしては、記述方法です。なので、それぞれの記述方法について見ていきます。
※実行するSQLとしては、『Usersテーブルから全権取得する』とします。
クエリビルダ
- DBファサードをUSE宣言
以下のようにDBファサードをuseしてあげる必要があります。
use Illuminate\Support\Facades\DB;
- データを取得するテーブルのモデルをUSE宣言
DBファサード同様にモデルをuseしてあげる必要があります。
use App\Models\User;
- クエリビルダ実行
$users = DB::table('users')->get();
Eloquent
- モデルをUSE宣言
use App\Models\User;
- Eloquent実行
$users = User::all();
このように、Eloquentの方がシンプルに記述することができます。
他のSQLの場合も見てみましょう。
※実行するSQLとしては、『Usersテーブルと紐づいているOrdersテーブルから特定の条件に当てはるデータ取得する』とします。
クエリビルダ
- クエリビルダ実行
$users = DB::table('users')
->join('orders', 'users.id', '=', 'orders.user_id')
->where('name', 'John')
->get();
Eloquent
- Usersモデルにリレーションを定義
class User {
public function orders() {
return $this->hasMany('App\Order');
}
}
- Eloquent実行
$user = User::first(1)->orders;
ここまで見ると、別にどっちでも良くない?と感じるからもいるかと思います。
しかし、まだ説明していない決定的な差があるのです・・・・
クエリビルダはSQLインジェクションが起こる可能性がある
クエリビルダの記載内容によっては、脆弱性対策がなされていないため、データの流出などに繋がる可能性があります。
そのため、Eloquentを使用した方がセキュアなコーディングとなるわけです。
特別な事情がなければ、Eloquentを使用するようにしましょう!!!!
おわり。
Discussion