DB操作
システム上からデータの取得や更新を行う為に、DBの基本操作であるCRUDをプログラミング言語(PHP等)から実行します。例えば、画面で更新というボタンを押したら、プログラミング言語からDBへUPDATE文を流してと命令が送られて、DB上でUPDATE文が実行されるという仕組みです。フレームワークを使えば、データの更新なども簡単に行うことが出来ます。
※CRUDについては以下記事で解説しています。
【MySQL入門③】データベースの基本操作CRUDを解説!
今回は、以下テーブルを使ってDB操作を行います。
<profilesテーブル>
id | name | age | updated_at |
1 | 山田太郎 | 24 | NULL |
2 | 佐藤花子 | 21 | NULL |
データ取得
データ取得はSELECT文を使います。
以下の記事でもデータ取得の方法を1つ紹介しました。(find()を紹介しています。)
LaravelでDB(MySQL)へ接続し、データを取得する
findだと、idを指定するSELECT文しか投げることが出来ません。
そこで、自由にWHERE句を付けれる様な書き方を紹介します。
$value = $インスタンス変数->select(カラム名)->where(カラム名, 条件, 値)->get();
これで、指定したカラムの値を指定した条件で取得することができます。
例えば、ageが22より小さいデータのみを取得する書き方は以下になります。
$profile = new Profile; $value = $profile->select('id', 'name', 'age')->where('age', '<', 22)->get();
結果、$valueにはid=2のデータのみ取得されます。
id | name | age |
2 | 佐藤花子 | 21 |
<実行SQL>
SELECT id, name, age FROM profiles WHERE age < 22;
ただ、値の取り出しには注意してください。
findの場合は、取得されるレコードが1レコードとなっているため、$value[‘キー’]で値をとりだせました。
selectの場合は、複数レコードが取得されることがあるため、1レコードしか取得されなくても、自動的に2次元配列になります。
<html> <head> <title>HelloWorld</title> </head> <body> <a>{{ $value[0]['id'] }}</a> <a>{{ $value[0]['name'] }}</a> <a>{{ $value[0]['age'] }}</a> </body> </html>
複数レコードを取得した場合は、「0,1,2・・・」と数字が増えていきます。
データ追加
データの追加はINSERT文を使います。
$インスタンス変数->insert([カラム名 => 値]);
カンマ区切りで複数カラムへ値を入れることができます。
以下データを新規追加してみます。
id | name | age |
3 | 田中一 | 34 |
$profile->insert(['id' => 3, 'name' => '田中一', 'age' => 34]);
profilesテーブルの中身を確認すると、田中一のデータが追加されているはずです。
<実行SQL>
INSERT INTO profiles (id, name, age) VALUES (3, '田中一', 34);
データ更新
データの更新はUPDATE文を使います。
$インスタンス変数->where(カラム名, 条件, 値)->update([カラム名 => 値]);
UPDATE文はWHERE句を付けないと全てのデータが更新されてしまうので、必ず付ける様にしてください。
山田太郎のageを27にUPDATEしてみます。
$profile->where('id', 1)->update(['age' => 27]);
WHERE句に関して、where(‘id’ , ‘=’, 1)と書いても良いですが、カラムと値が等しいかを比べる場合は、第2引数に値を指定することで比較できます。
また、updated_atが自動的に更新されるので、テーブルにupdated_atのカラムが存在しない場合は、エラーになります。
<実行SQL>
UPDATE profiles SET age = 27 WHERE id = 1;
データ削除
データの削除はDELETE文を使います。
$インスタンス変数->where(カラム名, 条件, 値)->delete();
UPDATE文と同様に、WHERE句を付けないと全てのデータが削除されてしまうので、必ず付ける様にしてください。
佐藤花子のデータをDELETEしてみます。
$profile->where('id', 2)->delete();
<実行SQL>
DELETE FROM profiles WHERE id = 2;
まとめ
Laravelのクエリビルダを使ってCRUDを行いました。
簡単にデータの取得から削除まで実装することができます。
様々なWHERE句の条件を書くこともできるので、色々調べて試してみてください。