• ブログTOP
  • AI・ディープラーニング
  • AR
  • VR
  • WEBサイト
  • WEBマーケティング
  • SEO
  • SNS
  • その他
  • お問い合わせ

ALAKI株式会社

COZIKEEいつまでも使えるTech情報発信ブログ

LaravelのクエリビルダでFROM句にサブクエリを利用する方法

2019年4月10日

  • このエントリーをはてなブックマークに追加

こんにちは、Webプログラマの篠田です。

ALAKIでは、Webサービスの開発にLaravelというPHPのフレームワークを活用しています。

今回は、Laravelのクエリビルダを利用して特殊な「サブクエリ」を含むSQLの作成方法をご紹介します。

この記事の目次

  • 1 クエリビルダの基本
  • 2 FROM句、直後のサブクエリの作り方
  • 3 まとめ

クエリビルダの基本

Laravelで、SQLを作成する方法はいくつかありますが、その中で「クエリビルダ」を活用したSQLの作成方法というのがあります。

例えば、下記のようなSQLをクエリビルダで表現してみます。

【SQLの場合】

1
SELECT * FROM users WHERE id=1;

【クエリビルダの場合】

PHP
1
2
3
DB::table('users')
->where('id', '=', 1)
->get();

このようにして、クエリビルダを利用することで、生SQLと同等の処理を行うことができます。

FROM句、直後のサブクエリの作り方

今回、問題となったのが下記のようなSQLを、クエリビルダを活用して作成しようとした場合でした。

1
SELECT * FROM ( SELECT * FROM users WHERE users.id=1 ) AS user LEFT JOIN address ON address.id = user.address_id;

このSQL文は、最初にテーブル「users」を「id=1」で絞り込んでから、テーブル「address」で「LEFT JOIN」してテーブル「users」のレコードを取得するものです。

これをクエリビルダで実現しようとしたときの難所が、最初のFROM句にある「 ( SELECT * FROM users WHERE id=1 ) AS user 」であるサブクエリを表現しないといけない点です。

これをクエリビルダで表現するには、いくつかの工程を行う必要があります。

SQLを分解して作成する

クエリビルダは非常に簡単にSQLを作成することができるのですが、複雑なSQLを記述する場合、いくつかの工程を踏む必要があります。

まずは、「FROM句」で利用するサブクエリ部分の処理を用意します。

PHP
1
2
3
$userSql = DB::table('users')
->where('users.id', '=', ':user_id')
->toSql();

今回は、値を安全に取り扱うためプレースホルダを利用した記述方法にしています。

このSQLでは、実際にレコードを取得せず、SQL文のみを「$userSql 」に代入するというのがポイントです。

「toSql」メソッドを利用することで、SQLを実行せずにSQL文だけを作成することができます。

SQLを取り込む

先程、作成したSQL文を保持している変数「$userSql 」を取り込んだSQL文を作成していきます。

PHP
1
2
3
4
DB::table(DB::raw('('.$userSql.') AS user'))
->leftJoin('address', 'address.id', '=', 'user.address_id')
->setBindings([':user_id'=>$user_id])
->get();

通常、「DB::table」メソッドの第1引数には、FROM句に入る「テーブル名」を記入します。

今回は、事前にテーブルとなるサブクエリを「$userSql」が保持しています。

ただ、このままでは引数として使えないので、「DB::raw」メソッドを利用して生SQLを取り込む処理をおこないます。

最終的に「DB::raw」メソッドには「( SELECT * FROM users WHERE users.id=1 ) AS user」となるSQLを引数に持たせることで、FROM句にサブクエリを渡すことができます。

最後に、サブクエリ内にプレースホルダを利用しているので、バインド処理を「setBindings」メソッドを利用することで対応することができます。

まとめ

最初のFROM句に、サブクエリを利用するクエリビルダの書き方が見つからず、悪戦苦闘しました。

Laravelのクエリビルダは非常に便利な機能なので、ドンドン活用できるようにしていきたいですね。

 


現場の業務フローに寄り添ったWebシステムをお求めなら、私たちALAKIにご相談ください。

ALAKIは経営者様が感じている問題点と、実際にWebシステムを利用される現場スタッフ様が直面している課題を、弊社システムエンジニアが丁寧に聞き取り、お客様と共にシステムを作り上げていきます。
業務改善が実現できるWebシステムをお求めの方は、是非ALAKIにご相談ください。

・ALAKIのWebシステム開発

・ALAKIのクラウド型受発注システム

  • ツイート
  • このエントリーをはてなブックマークに追加

You may also like...

  • 828d070c1e9b0e8c43a7f928c1098ea8_m

    Laravel5.6でテンプレートエンジン「Twig」を使えるようにしよう!

    27 8月, 2018

  • 13993703_xxl

    twig30分クッキング-テンプレート編(1)-

    12 8月, 2016

  • service_img03

    絵文字をMySQLに保存する時に気をつけるべき1つのこと

    3 3月, 2017

  • Next story WebARはじめてみませんか?〜第4回 tracking.jsで完全オリジナルのマーカーを実現 / 画像認識編〜
  • Previous story PhpStorm(2018.3)を日本語化して活用しよう!

弊社サービス

MONJI+ MUGHEN ALAKI クラウド型受発注システム さよなら過去のAR。WebARがイベント集客に革命を起こします。

運営会社

ALAKI株式会社 ALAKI株式会社採用サイト

人気の記事

  • alaki1462_A_businessman_who_works_logically_1da80a2e-c297-4911-bdd6-feba0ebf1357

    仕事術

    【書籍要約】数学的な仕事術大全

    4 11月, 2024

  • fv-main-img-min

    空間コンピューティング

    世界初!「空間コンピューティング」を専用端末不要、スマホのWebブラウザのみで実現する『Web XR Site』を公開しました

    22 6月, 2023

  • Virtual reality players isometric vector illustration. VR UI and navigation. Futuristic digital technology. Virtual screen. Mixed reality 3d concept. Person in VR headset. Web banner idea

    AR

    Appleから新世代MRグラス「Vision Pro」の登場 – デジタルと現実世界が融合する新時代へ

    6 6月, 2023

  • AWE

    未分類

    ARアプリ『MUGHEN』が世界最大のAR/VRアワード「AWE」のファイナリストに選出されました!

    26 5月, 2023

  • python-logo-master-v3-TM

    pyhotn / 業務効率化

    「SwinIR」で高画質化した画像を pythonを使用して一括で元のサイズに戻す方法

    2 2月, 2023

カテゴリー

  • AI・ディープラーニング
  • AR
  • BtoB
  • CMS
  • Git
  • Google AdWords
  • gulp
  • Javascript
  • Laravel
  • Photoshop
  • Pug
  • pyhotn
  • Sass
  • SEO
  • SNS
  • Twitter広告
  • VR
  • Web3.0
  • WEBサイト
  • WEBマーケティング
  • YouTube
  • コーディング
  • システム開発
  • スマートフォンサイト
  • セキュリティ
  • セミナー
  • その他
  • ツール
  • デザイン
  • ベトナムレポート
  • 仕事術
  • 未分類
  • 業務効率化
  • 空間コンピューティング
  • 色

アーカイブ

  • 2024年11月
  • 2023年6月
  • 2023年5月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年2月
  • 2021年12月
  • 2021年9月
  • 2021年7月
  • 2021年6月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年6月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年12月
  • 2017年11月
  • 2017年10月
  • 2017年9月
  • 2017年8月
  • 2017年7月
  • 2017年6月
  • 2017年4月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年7月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2013年10月
  • 2013年9月

Facebook

お問い合わせ

お問い合わせ

人気の記事

  • 【書籍要約】数学的な仕事術大全
  • 世界初!「空間コンピューティング」を専用端末不要、スマホのWebブラウザのみで実現する『Web XR Site』を公開しました
  • Appleから新世代MRグラス「Vision Pro」の登場 – デジタルと現実世界が融合する新時代へ
  • ARアプリ『MUGHEN』が世界最大のAR/VRアワード「AWE」のファイナリストに選出されました!
  • 「SwinIR」で高画質化した画像を pythonを使用して一括で元のサイズに戻す方法

カテゴリー

  • AI・ディープラーニング
  • AR
  • BtoB
  • CMS
  • Git
  • Google AdWords
  • gulp
  • Javascript
  • Laravel
  • Photoshop
  • Pug
  • pyhotn
  • Sass
  • SEO
  • SNS
  • Twitter広告
  • VR
  • Web3.0
  • WEBサイト
  • WEBマーケティング
  • YouTube
  • コーディング
  • システム開発
  • スマートフォンサイト
  • セキュリティ
  • セミナー
  • その他
  • ツール
  • デザイン
  • ベトナムレポート
  • 仕事術
  • 未分類
  • 業務効率化
  • 空間コンピューティング
  • 色

検索

ALAKI株式会社 © 2025. All Rights Reserved.