テーブルの概要
社員テーブル(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を書きたくて調べたけど、あまりサンプルコードがなかったので共有させて頂きました。
何か間違い等あれば、コメント頂けると嬉しいです。
最後まで、ありがとうございました。