params)) { $query->query = $this->_interpolate($query); } $this->_log($query); } /** * Wrapper function for the logger object, useful for unit testing * or for overriding in subclasses. * * @param LoggedQuery $query to be written in log * @return void */ protected function _log($query) { Log::write('debug', $query, ['queriesLog']); } /** * Helper function used to replace query placeholders by the real * params used to execute the query * * @param LoggedQuery $query The query to log * @return string */ protected function _interpolate($query) { $params = array_map(function($p) { if ($p === null) { return 'NULL'; } return is_string($p) ? "'$p'" : $p; }, $query->params); $keys = []; foreach ($params as $key => $param) { $keys[] = is_string($key) ? "/:$key/" : '/[?]/'; } return preg_replace($keys, $params, $query->query, 1); } }