SQL系
toSql()
クエリビルダの作成されるSQL文を確認する。
>>> User::where('id', 1)->toSql();
=> "select * from `users` where `id` = ?"
クエリビルダ以外で使おうとするとエラーだったり、戻り値が想定とは異なってくる。
>>> User::all()->toSql();
// BadMethodCallException with message 'Method Illuminate/Database/Eloquent/Collection::toSql does not exist.'
>>> User::find(1)->toSql();
=> "select * from `users`"
// find()のSQLではない
// $user = new User(); $user->toSql();の結果と同じ
DB::enableQueryLog(), DB::pretend()
バインディングしている値も確認できる。
// QueryLog
\DB::enableQueryLog();
User::all();
User::find(1);
\DB::getQueryLog();
// またはpretend
\DB::pretend(function () {
User::all();
User::find(1);
});
// どちらも以下が返される。
=> [
[
"query" => "select * from `users`",
"bindings" => [],
"time" => 1.21,
],
[
"query" => "select * from `users` where `users`.`id` = ? limit 1",
"bindings" => [
1,
],
"time" => 1.18,
],
]
dump, log系
dump()
変数をdumpする。php標準のvar_dump()より見やすい。
>>> dump([1,2,3]);
array:3 [
0 => 1
1 => 2
2 => 3
]
>>> var_dump([1,2,3]);
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
// 複数の値を一気に表示できる
>>> dump(1, 2, 3, 4);
1
2
3
4
dd()
dumpした時点で処理を終了する(dump and die)。使い方はdump()と同じ
info(), logger()
ログに書き出す。
info('sample info');
// [2019-04-18 14:15:36] local.INFO: sample info
logger('sample debug');
// [2019-04-18 14:15:45] local.DEBUG: sample debug
logger()->error('sample error');
// [2019-04-18 14:16:37] local.ERROR: sample error
オブジェクトも書き出したいときは、print_r($object, true)とする。
logger(new App\Eloquent\User);
// [2019-04-18 14:19:18] local.DEBUG: []
logger(print_r(new App\Eloquent\User, true));
// [2019-04-18 14:19:31] local.DEBUG: App\Eloquent\User Object
// ...(オブジェクトの情報)
[おまけ] dump-server
dump情報をターミナルで表示できる。まずは起動する。
(dump-serverを起動しておくと、ビューではdump情報が表示されなくなります)
$ php artisan dump-server
以下のようにdump()しておき・・・
routes/web.php
Route::get('/', function () {
dump(User::where('id', 1)->toSql());
return view('welcome');
});
/
にアクセスすると、ターミナルで以下のように表示してくれる。
GET http://localhost/
---------------------
------------ ---------------------------------
date Thu, 18 Apr 2019 15:47:22 +0900
controller "Closure"
source web.php on line 49
file routes/web.php
------------ ---------------------------------
"select * from `users` where `id` = ?"