仕事でウェブアプリの開発をしています。
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();
こんな感じです。