Laravel クエリビルダとは?Eloquentの違いと使い方

Laravel 入門講座

クエリビルダを使って、データベースを操作し、テーブルからデータを取得したりできます。

クエリビルダは、SQL文を簡単に記述できるようにしたもの。

ですがLaravelでは、通常はEloquentを使って、データベースを操作します。

じゅんこ
じゅんこ

クエリビルダとEloquentは、一体何が違うのだろう?

こんなふうに感じる方のために、クエリビルダについて、Eloquentとの違いや使い方と共に解説していきますね。

クエリビルダとEloquentの比較

まずは両者の違いについて表でまとめてみます。

次のような感じです。

記述量 抽象度 SQLの知識
クエリビルダ 多め 低い

*SQL構文の理解が必要

必要
Eloquent 少な目 高い

*SQLを意識しなくてOK

なくてもOK

クエリビルダで記述することは、通常のEloquentでも可能。

Eloquent利点

わたしの感覚だと、クエリビルダを使うよりもEloquentのほうがラクだし便利。

リレーションがあるデータの操作なども、Eloquentのほうが簡単にできます。

SQL文に詳しくなければ、あえてクエリビルダを使う必要はないでしょう。

クエリビルダの利点

逆にSQLの構文について知識がある人にとっては、クエリビルダのほうが使いやすいでしょう。

またモデルがないときは、クエリビルダのほうがコードを作りやすいと思います。

たとえば多対対でリレーションを作り、中間テーブルからデータを取るときなど。

そもそもクエリビルダとは?

そもそもクエリビルダとはなにか?

クエリビルダとは、SQL文を簡単に組み立てて、データベースの操作をしやすくしたもの。

SQL文とは、データベースの操作を行うための文です。

たとえば下記のような感じです。

【SQL文例】

MySQLにデータを挿入するときの書き方:
$変数名->prepare(‘INSERT INTO データベース名 SET 項目名1=?, 項目名2=?’)

*上記コードは下記記事内で使用しています。

結構記述がメンドウなのですが、クエリビルダは、より簡単にSQL文を書くことができます。

クエリビルダとEloquentの書き方の違い

では具体的にクエリビルダとEloquentの記述はどう違うのか。

例をご紹介します。

コードを書く前の準備について

まずはコードを書く前に、準備をしておきましょう。

必要な宣言も、クエリビルダとEloquentで異なります。

【クエリビルダ】

Laravelでクエリビルダを使用するには、最初にDBファサードをuse宣言する必要があります。

次に、データを取り出すテーブルのモデル名も、use宣言に入れておきましょう。

【Eloquent】

一方Eloquentでは、ファサードの宣言は不要です。

ただ利用するモデル名は、クエリビルダと同様、use宣言に入れる必要があります。

クエリビルダとEloquentの書き方の違い例①全要素取得

それでは実際に、クエリビルダとEloquentの書き方の違いをお見せします。

たとえば、Userテーブルの全要素を取得したいとき。

クエリビルダでは次のように記述できます。

【クエリビルダ】

Eloquentでの記述例は下記の通り。

【Eloquent】

Eloquentのほうがシンプルですね。

クエリビルダとEloquentの書き方の違い例②リレーション入り

もうひとつ、やや込み入った例をお見せします。

たとえばUserモデルとOrderモデルでリレーションがある場合。

Userモデルで【John】という名前の【id】に該当する、Orderモデルのデータを参照したいとします。

【クエリビルダ】

クエリビルダでは、SQL言語の構文を使って表現することができます。

例えばJOINとWHEREいうSQLの構文を使って、以下のように記述できます。

【Eloquent】

Eloquentでは、SQLを意識せずにリレーションを表現することができます。

Userモデルファイルに下記のようにリレーションを定義しておきます。

こうしておけば、いつでも、このリレーションを利用して、Orderモデルのデータを参照できます。

参照するときには、コントローラーに次のように記述できます。

結論:好きなほうを使えばOK

最後は少しややこしい例をご紹介しましたが、わたしの主観も込めて、ひとことでいうと、

  • クエリビルダはSQL文が分かる人にはわかりやすい
  • そうでないときにはEloquentのほうが書きやすい

ということです。

結局のところ、好きなほうを使えば良いのかな、と^^;

個人的には、Eloquentを使ったほうがラクだし、Laravelの良さを満喫できるように感じます。

なおEloquentを使ったデータの基本的な取り出し方は下記記事にまとめているので、併せて参考にしてください。

コメント

タイトルとURLをコピーしました