どのフレームワークを利用していてもそうですが、ORMを使用するのではなく、生のSQLを実行したいという機会が出てくると思います。
今回の記事では、Laravel5を使用して、生のSQLを実行する方法について紹介します。
Contents
Laravel5を使用して生のSQLを実行する方法
Select文を実行する
Laravel5で生のselect文を実行するためには、DBファサードのselectメソッドを使用します。
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show a list of all of the application's users. * * @return Response */ public function index() { $users = DB::select('select * from users where active = ?', [1]); return view('user.index', ['users' => $users]); } }
DBファサードの第一引数には、select文を指定し、第二引数にはバインドしたい値を配列で渡します。
このselectメソッドの戻り値は配列で返され、配列の中身はstdClassになります。
下記の様にする事でselectメソッドの戻り値を扱うことができます。
foreach ($users as $user) { echo $user->name; }
select文だけではありませんが、実行する際にバインドする値を違う方法で表現することもできます。
$users = DB::select('select * from users where id = :id', ['id' => 1]);
この方法でもselectメソッドの戻り値は同じなので、上の例と同様に戻り値の値にアクセスすることができます。
Insert文を実行する
select文を実行する際には、DBファサードのselectメソッドを使用しましたが、insert文を実行する場合には、DBファサードのinsertメソッドを実行します。
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Tom']);
insert文を実行する場合もselect文を実行する場合と同様、第一引数にinsert文、第二引数に配列でバインドしたい値を指定します。
Update文を実行する
Update文を実行する際には、DBファサードのupdateメソッドを使用します。
実際にプログラムは下記の様に記載します。これも今までの例と同様、第一引数にupdate文を第二引数にバインドしたい値を指定します。
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
Delete文を実行する
生のSQLを実行する場合には、DBファケードのdeleteメソッドを使用します。
このdeleteメソッドの戻り値は、実際に削除したレコードの数を返します。
$deleted = DB::delete('delete from users where where name = ?', ['tanaka']);
通常のSQL文を実行する
通常のデータベース文は戻り値を戻しません。こうしたタイプの操作には、DBファサードのstatementメソッドを使用します。
DB::statement('drop table users');
[参考]
・Raw Queries in Laravel