Laravelのクエリービルダーのメモ。「NOT LIKE」と「NULLまたは空文字」の抽出方法

仕事でウェブアプリの開発をしています。
Apache+PHP+MySQLという、まぁごくありきたりな環境で小さな業務アプリを開発しています。

フレームワークLaravelを使用

開発を楽にするためにPHPフレームワークを使用。
以前の開発現場で使用したことのあるLaravelを採用することにしました。

使用バージョンはちょっと古いですが4.2系です。

最近のPHPフレームワークのなかでもLaravelは利用者が増えているようで。
勉強して使いこなせれば今後に役立ちそうです。

あと利用者が多いおかげで日本語で調べられるのでありがたい。

SQLを発行する際に、クエリービルダーという便利なインタフェースが用意されています。
※SQLインジェクション対策にもなります。

そのクエリービルダーでちょっと悩まされたWHERE句についてメモとして残しておこうと。

NOT LIKE

「where」、「orWhere」、「whereBetween」、「whereNotBetween」、「whereIn」、「whereNotIn」、「whereNull」、「whereNotNull」が用意されているので、「NOT LIKE」も同様にあるかと思いきやありません。

さてどうしたものかと思いや、第2引数に演算子('<=’、’>’、'<>’)を指定できたのでは!?
同じ様にNOT LIKEも。

$users = DB::table('users')
                ->where('name', 'not like', 'T%')
                ->get();

LIKEも同じです。

NULLまたは、空文字

抽出条件に指定する項目が2つあります。
たとえばユーザIDと退会年月日(char(8)でYYYYMMDD型で値設定)とします。

この退会年月日にはNULLまたは空文字が混在しています。

抽出条件はこうです。
『退会年月日が未設定で、入力されたユーザIDと合致するレコードを抽出。』

select * from user where userid=’入力されたID’ and ( taikaiymd is null or taikaiymd=”);
というSQLで抽出できます。

これをクエリービルダーで実現させるのにちょっと苦労しました。

$users = DB::table('users')
                ->where('userid', '入力されたID')
                ->where(function ($query){
                    $query->whereNull('taikaiymd')->orWhere('taikaiymd', '');
                })
                ->get();

こんな感じです。

シェアする

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

フォローする