LaravelでDBを利用するメモ
LaravelからDBを利用してみます。 DBはSQLliteを利用して準備します。
/config/database.phpを変更
Laravelで利用するDBの設定情報は、/config/database.php
にあります。
<?php ...省略... return [ 'default' => env('DB_CONNECTION', 'mysql'), 'connections' => [ 'sqlite' => [ ...省略... ], 'mysql' => [ ...省略... ], 'pgsql' => [ ...省略... ], 'sqlsrv' => [ ...省略... ], ], ...省略...
今回は特に設定を変更しなくても大丈夫です。
.envの変更
.envファイルのDB_CONNECTION
以外をコメントアウトします。
DB_CONNECTION=sqlite DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
こんな感じになります。
DB_CONNECTION=sqlite #DB_HOST=127.0.0.1 #DB_PORT=3306 #DB_DATABASE=homestead #DB_USERNAME=homestead #DB_PASSWORD=secret
DBを利用してみる
DBクラスを利用してDBにアクセスしてみます。
DBはSQLliteで用意したものを利用しています。
コントローラーはこんな感じ。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UsersController extends Controller { public function index(Request $request) { $items = DB::select('select * from users'); return view('users.index',['items' => $items]); } }
users/index.blade.phpはこんな感じ。
@foreach($items as $item) <p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p> @endforeach
表示はこんな感じ。
sato / sato@sample.com / 30 kato / kato@samole.com / 35
パラメータ結合
sql文にパラメーターを組み合わせて利用できる機能です。
public function index(Request $request) { if(isset($request->id)){ $param = ['id' => $request->id]; $items = DB::select('select * from users where id = :id',$param); }else{ $items = DB::select('select * from users'); } return view('users.index',['items' => $items]); }
?id=1
などクエリ付きでアクセスした場合に:id
でクエリをSQL文に連結してくれます。
DBクラスでレコードを追加
レコードを追加する場合はDB::insert
を利用します。
DB::insert(SQL文,追加する値の配列);
controllerにpostメソッドを追加します。
public function post(Request $request) { $param = [ 'name' => $request->name, 'mail' => $request->mail, 'age' => $request->age ]; DB::insert('insert into users (name,mail,age) values (:name,:mail,:age)', $param); $items = DB::select('select * from users'); return view('users.index', ['items' => $items]); }
users/index.blade.phpはこんな感じ。
<form action="/users" method="post"> {{csrf_field()}} <div><span style="width: 150px; display: inline-block">名前</span><input type="text" name="name"></div> <div><span style="width: 150px; display: inline-block">メールアドレス</span><input type="email" name="mail"></div> <div><span style="width: 150px; display: inline-block">年齢</span><input type="number" name="age"></div> <input style="margin-top: 20px" type="submit" value="送信"> </form> @foreach($items as $item) <p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p> @endforeach
formに値を入れてpostするとこんな感じ。
postした値がDBに挿入される。
DBクラスでレコードを更新
レコードを更新する場合はDB::update
を利用します。
DB::update(SQL文, 更新する値の配列);
controllerはこんな感じ。
public function post(Request $request) { $param = [ 'id' => $request->id, 'name' => $request->name, 'mail' => $request->mail, 'age' => $request->age ]; DB::update('update users set name=:name,mail=:mail,age=:age where id = :id', $param); $items = DB::select('select * from users'); return view('hello.index', ['items' => $items]); }
users/index.blade.phpは雑なのですがこんな感じで。
@foreach($items as $item) <form action="/hello" method="post"> {{csrf_field()}} <input type="hidden" name="id" value="{{$item->id}}"> <div><span style="width: 150px; display: inline-block">名前</span><input type="text" name="name" value="{{$item->name}}"></div> <div><span style="width: 150px; display: inline-block">メールアドレス</span><input type="email" name="mail" value="{{$item->mail}}"></div> <div><span style="width: 150px; display: inline-block">年齢</span><input type="number" name="age" value="{{$item->age}}"></div> <input style="margin-top: 20px" type="submit" value="送信"> </form> @endforeach @foreach($items as $item) <p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p> @endforeach
これの「名前:sato」を
「名前:佐藤」に変更してpostする
postした値でDBが更新される。
DBクラスでレコードを削除
レコードを更新する場合はDB::delete
を利用します。
DB::delte(SQL文, 更新する値の配列);
controllerはこんな感じ。
public function post(Request $request) { $param = [ 'id' => $request->id ]; DB::delete('delete from users where id = :id', $param); $items = DB::select('select * from users'); return view('hello.index', ['items' => $items]); }
users/index.blade.phpは雑なのですがこんな感じで。
@foreach($items as $item) <form action="/hello" method="post"> {{csrf_field()}} <input type="hidden" name="id" value="{{$item->id}}"> <div><span style="width: 150px; display: inline-block">名前</span><input type="text" name="name" value="{{$item->name}}"></div> <div><span style="width: 150px; display: inline-block">メールアドレス</span><input type="email" name="mail" value="{{$item->mail}}"></div> <div><span style="width: 150px; display: inline-block">年齢</span><input type="number" name="age" value="{{$item->age}}"></div> <input style="margin-top: 20px" type="submit" value="削除"> </form> @endforeach @foreach($items as $item) <p>{{$item->name}} / {{$item->mail}} / {{$item->age}}</p> @endforeach
これのsatoを削除すると、
DBから削除される。