【Laravel】macro(マクロ)でクエリビルダを共通化する方法!

当ページのリンクには広告が含まれています。
【Laravel】macro(マクロ)でクエリビルダを共通化する方法
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

Laravelのmacro(マクロ)でクエリビルダを共通化する方法を知りたい」とお考えではありませんか?

DBの各テーブルに共通のカラムがあるとして、毎回SQLで条件を書くのが面倒な場合があります。

例えば、データが削除されているかを確認する際に「delete_flg = 0」みたいなWhere句を毎回書かなきゃいけない場合など。

いずみ

SQLを共通化するためのアプローチはいくつかありますが、今回はマクロで共通化してみます。

ということで、本記事ではLaravelのmacro(マクロ)でクエリビルダを共通化する方法を解説します。

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいませ。

執筆者/監修者
  • フリーランスエンジニア(保有資格個)
  • ブログ・アフィリエイト歴5年
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資歴5年(仮想通貨・FXが得意)
  • Twitterフォロワー約2,000人
  • 運営者情報はこちら
いずみです
目次

【Laravel】macro(マクロ)でクエリビルダを共通化する方法

早速ですが、Laravelのmacro(マクロ)でクエリビルダを共通化する方法を解説します。

STEP
AppServiceProviderでマクロを登録
use Illuminate\Database\Query\Builder;

public function boot()
{
    Builder::macro('withNotDeleted', function () {
        return $this->where('delete_flg', 0);
    });
}

AppServiceProviderのbootメソッドに上記を追加します。

STEP
必要なクエリで利用
use Illuminate\Support\Facades\DB;

// delete_flg が存在するテーブルの場合
$results = DB::table('your_table')
    ->withNotDeleted()
    ->where('other_column', 'value')
    ->get();

// delete_flg が存在しないテーブルの場合(何もしない)
$resultsNoFlag = DB::table('other_table')
    ->where('some_column', 'value')
    ->get();

上記のように使えばOKです。

いずみ

超簡単ですね。

マクロはかなり便利なのでどんどん使いましょう♪

まとめ

今回は、Laravelのmacro(マクロ)でクエリビルダを共通化する方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • Laravelのmacro(マクロ)でクエリビルダを共通化するにはAppServiceProviderにマクロを登録する。
  • マクロを必要に応じてクエリビルダで使用すればOK。
まとめ
  • おすすめ本
¥2,673 (2023/07/23 15:53時点 | Amazon調べ)

Laravelの勉強なら「」が分かりやすくておすすめですよ♪

いずみ

最後までお読みいただき、ありがとうございました!

  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

【Laravel】macro(マクロ)でクエリビルダを共通化する方法

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次