30
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Laravel 5.8] デバッグに便利なメソッドまとめ

Last updated at Posted at 2019-04-18

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` = ?"
30
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?