[Laravel] 結局のところ、生SQL文でDB操作するのが手軽で分かりやすい件

テーブルの概要

社員テーブル(e)

社員ID 社員名 部署ID 年齢
001 山田一郎 1 30
002 鈴木花子 2 34
003 佐藤次郎 3 28
004 田中三郎 1 27
005 佐々木四郎 2 23

部署テーブル(d)

部署ID 部署名
1 企画部
2 営業部
3 総務部

したいこと

配列である$idsに社員IDが入っているとする。
今回、その$idsを渡すと、下の結果が返ってくる処理を作りたいとする。

社員ID 社員名 部署名
001 山田一郎 企画部
002 鈴木花子 営業部
003 佐藤次郎 総務部
004 田中三郎 企画部

部署IDのところに、部署テーブルから引っ張ってきた部署名を入れたいだけです。

結論

コード

$sql = <<< SQL
    SELECT
        e.社員ID,
        e.社員名,
        d.部署名,
    FROM
        社員テーブル e //「社員テーブル」を「e」としている
    INNER JOIN
        部署テーブル d //「部署テーブル」を「d」としている
    ON
        e.部署ID = d.部署ID
    WHERE
        e.社員ID IN (1,2,3,4) // 取得したい社員IDは「1,2,3,4」
SQL;

$ids = DB::select($sql);

解説

今回は、SQL文そのものの解説は割愛します。
共有したいのは、

$sql = <<< SQL
# 処理させたいSQL文
SQL;
DB::select($sql);

これにより、Laravelでも生のSQL文が使え、便利だということです。

※ちなみに、実務ではカラム名等は英語にすることが一般的です。ご注意を。

DBファサードやeloquentも便利なのだが…

もちろん、Laravelにはとても便利なDBファサードや、eloquentという仕組みがあります。
しかし、少し複雑な処理になってくると、結局部分的にrawメソッドなどを使って、生SQLを書く部分が出てくるかと思います。
それなら、いっそ初めから生SQLで丸っと書いてしまった方が、可読性も高く、修正もしやすいのではないか…という考えです。

最後に

今回は、Laravelで生SQLを書きたくて調べたけど、あまりサンプルコードがなかったので共有させて頂きました。
何か間違い等あれば、コメント頂けると嬉しいです。
最後まで、ありがとうございました。

PON3

PON3

5年くらい前に、30代完全未経験から独学でWeb系のソフトウェアエンジニアになった人。 現在はフリーランスエンジニアとして、大阪の自宅からフルリモートで東京の自社開発企業のお仕事をしている。 主戦場はバックエンドで、Go言語でのAPI開発や、Pythonでのデータ分析が武器。 とは言いつつ、フロントエンドをSPAを実装したり、IaCでクラウドインフラの設計構築したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と2歳になる娘の3人暮らし。 何かご用件がある方は、TwitterのDMからどうぞ。