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を使ったデータの基本的な取り出し方は下記記事にまとめているので、併せて参考にしてください。

Laravelデータベース Laravel入門講座

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

 

Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
デプロイ講座付。StripeやChatGPT連携など過去10回分のセミナー動画視聴可能。

Laravel実践スキルをのばしたい方におすすめです。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました