{"id":258,"date":"2021-05-17T11:00:00","date_gmt":"2021-05-17T11:00:00","guid":{"rendered":"https:\/\/www.escueladefrikis.com\/?p=258"},"modified":"2021-05-17T11:00:00","modified_gmt":"2021-05-17T11:00:00","slug":"anadir-en-las-trazas-las-queries-de-base-de-datos-ejecutadas","status":"publish","type":"post","link":"https:\/\/escueladefrikis.com\/index.php\/2021\/05\/17\/anadir-en-las-trazas-las-queries-de-base-de-datos-ejecutadas\/","title":{"rendered":"A\u00f1adir en las trazas las queries de base de datos ejecutadas en Laravel 8"},"content":{"rendered":"\n<p>Sigo investigando Laravel 8 y buscando funcionalidad a la que estoy acostumbrado en otros frameworks. Vengo del mundo de C++ y Java, por lo que me tengo que adaptar e investigar c\u00f3mo resolver en este framework de PHP los problemas comunes que voy encontrando.<\/p>\n<p>Uno de ellos es saber exactamente qu\u00e9 query est\u00e1 ejecutando el framework. Eloquent parece bastante potente pero soy poco amigo de dejar hacer demasiadas cosas al framework y me gusta siempre tener el control, o por lo menos, saber exactamente qu\u00e9 est\u00e1 haciendo \u00abpor debajo\u00bb. Muy recomendable el art\u00edculo <a href=\"https:\/\/javisantana.com\/2019\/04\/07\/odio-los-framework.html\">\u00abOdio los frameworks\u00bb<\/a> del grand\u00edsimo Javi Santana para saber de qu\u00e9 estoy hablando.<\/p>\n<p>As\u00ed que, continuando con la anterior entrada en la que <a href=\"https:\/\/www.escueladefrikis.com\/2021\/05\/03\/trazas-o-logging-customizado-en-laravel-8\/\">customizaba los logs de Laravel<\/a>, en este caso quiero ver en traza qu\u00e9 query est\u00e1 ejecutando en cada momento.<\/p>\n<p><!--more--><\/p>\n<p>Para ello, se puede a\u00f1adir un Listener de base de datos y el lugar m\u00e1s sencillo es en la configuraci\u00f3n de los Service Providers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app\/Providers\/AppServiceProviders.php\n\npublic function boot()    {\n        \/*ADD THIS LINES*\/\n        $this-&gt;commands(&#91;\n            InstallCommand::class,\n            ClientCommand::class,\n            KeysCommand::class,\n        ]);\n        if ($this-&gt;app-&gt;environment('local')) {\n            DB::listen(function($query) {\n                Log::info('Query: ' . $query-&gt;sql . PHP_EOL);\n                Log::info($query-&gt;bindings);\n            });\n        }\n    }\n<\/code><\/pre>\n\n\n\n<p>Con esto, conseguimos mostrar en traza qu\u00e9 queries est\u00e1 ejecutando mostrando:<\/p>\n<ul>\n<li>La query que se ejecuta<\/li>\n<li>Con qu\u00e9 variables (\u00ab<em>bindings<\/em>\u00ab) se est\u00e1n utilizando en la query, es decir, qu\u00e9 valor sustituye cada uno de los caracteres \u00ab?\u00bb.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>storage\/logs\/laravel.log\n\n&#91;2021-04-21 21:45:19.776] Query: select * from `oauth_clients` where `id` = ? limit 1 \n&#91;2021-04-21 21:45:19.776] array (   0 =&gt; '1', )<\/code><\/pre>\n\n\n\n<p>Es decir, la query que se ha ejecutado es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>select * from `oauth_clients` where `id` = '1' limit 1 <\/code><\/pre>\n\n\n\n<p>Bastante sencillo, aunque me ha llevado bastante tiempo de b\u00fasquedas en Google. En principio, no es una configuraci\u00f3n a llevar a producci\u00f3n ya que la escritura en traza suele ser bastante costosa, pero al menos en desarrollo va a ser muy \u00fatil.<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,5],"tags":[11,22,24,25],"class_list":["post-258","post","type-post","status-publish","format-standard","hentry","category-laravel-8","category-programacion","tag-bases-de-datos","tag-laravel","tag-logging","tag-php"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts\/258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/comments?post=258"}],"version-history":[{"count":0,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts\/258\/revisions"}],"wp:attachment":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/media?parent=258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/categories?post=258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/tags?post=258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}