Table of Contents
SQL実行方法パターン
- eloquentを駆使して頑張る
- QueryBuilderで構築する
- 直接SQLを書いて実行する
1. eloquentを駆使して頑張る
モデルにリレーションを書いて頑張れば行けばできなくはないかもしれないですが、「リレーション先に条件をかける」や「サブクエリを実行する」等々出てくると、SQLより書く内容が複雑になるし、SQLの実行速度も遅くなりメリットないなーと思ってます。
2. QueryBuilderで構築する
QueryBuilderを使うは別に悪くないと思ってますが、自分はある程度の規模のSQLを組む時いきなりQueryBuilderを組まずにSQLを組んでからQueryBuilderに書き直します。
PHP上の可読性とのバランスになってくると思いますが、1000行くらいであればQueryBuilderに起こしなおさなくてもいいかなーと思ってます。
3. 直接SQLを書いて実行する
自分はこれを選択してます。
※あくまでも、SQLが複雑な場合に限定して使用しています。
なので、自分は「規模」「複雑度」等々に応じて eloquent
、QueryBuilder
、SQL
を使い分けてます。
本題のSQLをどこに置くのか?
自分は resources
にSQLファイルを外だししてSQLを読み込んで実行する方法をとってます。
PHP上にいきなりSQLが出てくると読みにくいかなーと考えているからです。
また、SQLを読み込む処理は毎回同じコードになるので、パッケージ化「kozo/liberation」して使用してます。
使い方
1. インストール
composer require kozo/liberation
2. SQLファイルの設置
-- ここにごっついSQLを記述
select * from example
3. SQLファイルの読み込み + 実行
// QueryBuilderから直接SQLファイル読み込み + SQL実行
$bindParams = []; // SQLにbindする値
$bladeParams = []; // bladeで利用する値
$rows = DB::query()->sql('example', $bindParams, $bladeParams);
こんな風にしておけば、ある程度シンプルにまとまってないですかね?
それぞれのやり方にメリット・デメリットが存在していると思います。
「こんなやり方がいいのでは?」等々あれば教えてください!
sakuragawa
PHPエンジニアです。